2012-03-27 59 views
1

我是Backbone的新手。Backbone.js框架中的相同'类'的嵌套模型?

是否可以在主干中定义一个模型,其中包含相同类型的模型列表?例如:

MyModel = Backbone.Model.extend({ 
    initialize: function() { 
    nestedMyModels:new Array(); 
    }, 

    addMyModel: function(aModel) { 
    // Code here would push() aModel onto array 
    }, 

    render: function() { 
    // Loop through array calling render() recursively 
    } 
}); 

然后,我会有一个View开始递归调用render()。例如:

MyView = Backbone.View.extend({ 
    render:function() { 
    this.model.render(); 
    } 
}); 

回答

3

1没有数组,但集合

始终,你认为在ModelsArray骨干想在Collection

现在你要做的就是实现MyModels集合,并保持它的一个实例在为MyModel实例什么。你认为在render

// code simplified and not tested 
MyModel = Backbone.Model.extend({ 
    initialize: function() { 
    this.nestedMyModels: new MyModels(); 
    }, 

    addMyModel: function(model) { 
    this.nestedMyModels.add(model); 
    } 
}); 

MyModels = Backbone.Collection.extend({ 
    model: MyModel 
}); 

2次使用的渲染

始终认为在View

而推荐的方法是,如果你有一个CollectionModel更好每个View。通过这种方式,收集的视图将调用一个迭代模型的视图:

// code simplified and not tested 
MyModelView = Backbone.View.extend({ 
    render: function(){ 
    this.$el.html(model.get("name")); 
    var view = new MyModelsView({ collection: this.model.nestedMyModels }); 
    this.$el.append(view.render.el); 

    return this; 
    } 
}); 

MyModelsView = Backbone.View.extend({ 
    render: function(){ 
    this.collection.each(function(model){ 
     var view = new MyModelView({ model: model }); 
     this.$el.append(view.render.el); 
    }); 

    return this; 
    } 
}); 
+0

谢谢fguillen。因此,在集合中为每个模型使用新的视图允许每个模型响应它自己的UI事件(例如)? – Jack 2012-03-28 08:05:44

+0

为了澄清,我应该写下:'Collection **中的每个Model **实例响应其自己的UI事件(例如)? – Jack 2012-03-28 08:36:29

+0

UI事件与'View'相关,而不是'Model',所以每个唯一的View将响应它自己的UI事件。在你的情况下,我们可以说**是**,但在一个特殊的情况下,**两个不同的视图**与**相同的模型相关**每个视图将管理它自己的UI事件。 – fguillen 2012-03-28 09:22:21

0

你想要的是一个collection。它基本上是一个列表或一组模型。

0

集合是有序的模型集合。欲了解更多信息,请查看。 http://backbonejs.org/#Collection

下面是一个例子:

var Library = Backbone.Collection.extend({ 
    model: Book 
}); 
+0

以下示例中,我的问题是库集合是否可以包含库集合? – Jack 2012-03-27 19:38:07

0

是否有可能确定在骨干模型包含相同类型的模型 名单?

当然,为什么不呢。

var MyModel = Nested.Model.extend(); 

MyModel.define({ 
    defaults : { 
    nestedMyModels : MyModel.Collection 
    }, 

    addMyModel: function(model) { 
     this.nestedMyModels.add(model); 
    } 
}); 

只是不在香草主干。你需要一个插件。 https://github.com/Volicon/backbone.nestedTypes

PS:而且正如其他回复中提到的那样,您需要使用View来渲染东西。不是型号。