我的应用程序中模型的数量迅速增长。我想知道你对backbone.js的标准做法。假设您要创建一个需要2个其他模型的视图。您是否创建了一个新的模型类来包含这样的2个模型:
var m = new TheModel({
model1: new Model1,
model2: new Model2
});
var view = new TheView({model:m});
或者您只是做了类似的事情:
var m = {
model1: new Model1,
model2: new Model2
};
var view = new TheView({model:m});
第二个似乎更好,因为那时我不需要额外的模型类TheModel
。但是如果我混合使用这两种方法,那么在我看来,我必须记住我正在使用哪种风格,因为如果我想要访问model1
或model2
,那么有两种不同的方式:
var m1 = this.model.get('model1');
或第二种方案中的这种方式:
var m1 = this.model.model1;
你认为哪个更好?你如何组织所有的模型和观点?
谢谢!
答案 0 :(得分:3)
除非有理由链接您的模型,否则我不会创建聚合其他模型的新模型。第二种选择更好,因为你没有链接它们。
我更愿意将它们进一步分开:
var view = new TheView({purchases: purchasesModel, user: userModel });
然后,在视图中,您没有引用this.model
,而是专门引用this.purchases
和this.user
。
你看,视图上的model
属性实际上只是一个约定。除了model
属性将在构造函数中自动复制之外,视图中的model
属性没有什么特别之处。除此之外,model
中没有Backbone.View
的引用。
当然,这意味着你需要用它做点什么:
var TheView = Backbone.View.extend({
initialize: function(options) {
this.purchases = options.purchases;
this.user = options.user;
}
});
通过这种方式,您可以明确了解所需的多个模型。我比verison#2更喜欢这个,因为你没有明确关于View的要求。
答案 1 :(得分:1)
在这种情况下,您应该使用集合。您可以在此处详细了解收藏集:http://backbonetutorials.com/what-is-a-collection/