在视图中使用任意/不同的Backbone模型

时间:2014-09-27 03:21:36

标签: javascript backbone.js requirejs

可以在单个中央视图中使用通过require.js / AMD定义的不同定义的模型吗?我指的是单独定义的模型,而不是集合中的模型。

如果是,那么在define()的回调函数的json部分中如何引用它们来定义中心视图,在其变量中,在其属性的函数中等等。只能有一个this.model ,对吗?

是否有可能从这个单一的中心视图中有条件地渲染不同模型,可能由这些不同模型的变量填充?

扩展我的问题:

可以在单个中心视图中使用通过require.js / AMD定义的不同定义的集合吗?

可以在一个集合中使用通过require.js / AMD定义的不同定义的模型吗? (仅此一项就可以实现第一个目标,只能参考这个有能力的集合。)

1 个答案:

答案 0 :(得分:0)

  

可以使用通过require.js / AMD定义的不同定义的模型   单中央视野?我的意思是单独定义的模型,而不是a   集合。

     

如果是,它们如何在回调的json部分中引用   define()的函数,在其变量中定义该中心视图   其属性的功能等。只有一个this.model,对吧?

View this.model只是提供模型视图的一种方式。您还可以将任何其他选项传递给视图,例如:

var YourView = Backbone.View.exend({
    initialize: function(options) {
        this.foo = options.foo;
    }
});
var modelA = new Backbone.Model();
var modelB = new Backbone.Model();
var yourView = new YourView({model: modelA, foo: modelB});
// yourView.model == modelA
// yourView.foo == modelB
  

是否可以渲染不同的模板,可能填充   来自这些不同模型的变量,有条件地,来自此内部   单一中央观点?

烨。例如,如果我们向YourView添加渲染方法,这是一个例子:

render: function() {
    if (this.model.get('bar')) {
        this.$el.html(this.templateA(this.model.toJSON());
    } else {
        this.$el.html(this.templateB(this.foo.toJSON());
    }
}
  

可以使用通过require.js / AMD定义的不同定义的集合   在一个中心视图?   是的,就像你传递多个模型一样。如果你使用Require,那没关系;你可以通过它传递Backbone对象/类。

     

可以使用通过require.js / AMD定义的不同定义的模型   单一收藏? (仅这一点就可以实现第一个目标   仅引用此功能集合。)   是的,只需将所有模型放入一个集合中,如下所示:

var modelA = new ModelClass();
var modelB = new SomeOtherModelClass();
var collection = new Backbone.Collection([modelA, modelB]);

唯一的限制是Collection只能有一个model属性,这意味着只要您通过Model创建新的Collection(例如,通过fetchcreate)他们都属于那种模式。

(如果您使用自定义功能替换model,即使可以解决此问题,但您不应该这样做。)