相同的嵌套模型'类'在Backbone.js框架中

Nested models of the same 'class' in the Backbone.js framework?

本文关键字:Backbone js 框架 模型 嵌套      更新时间:2023-09-26

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

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

1没有数组,只有集合

你总是在主干网的ModelsArray中思考,在Collection中思考。

现在,您要做的是实现一个MyModels的集合,并在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使用视图进行渲染

你总是在render中思考,在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;
  }
});

您想要的是一个集合。它基本上是一个模型列表或数组。

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

这里有一个例子:

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

是否可以在主干网中定义一个模型,该模型包含相同类型的型号?

当然,为什么不呢。

var MyModel = Nested.Model.extend();
MyModel.define({
  defaults : {
    nestedMyModels : MyModel.Collection
  },
  addMyModel: function( model ) {
      this.nestedMyModels.add( model );
  }
});

只是没有香草味的Backbone。你需要一个插件。https://github.com/Volicon/backbone.nestedTypes

PS:正如其他回复中提到的,你需要使用View来渲染东西。不是模型。