2012-03-27 79 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來渲染東西。不是型號。