我是Backbone的新手。

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

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,该View启动了对render()的递归调用。例:

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

最佳答案

1没有数组,但有集合

总是在Backbone中以ArrayModels来思考。

现在,您要做的是实现MyModels的Collection并将其一个实例保留在MyModel实例中。

// 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使用Views进行渲染

总是在Collection中思考。

推荐的方式是,如果您有一个renderView更好的是每个都有一个Collection。这样,集合的视图将在迭代中调用模型的视图:

// 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;
  }
});

09-10 05:02
查看更多