如何避免太多的模型类

时间:2011-11-12 15:30:39

标签: backbone.js

我的应用程序中模型的数量迅速增长。我想知道你对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。但是如果我混合使用这两种方法,那么在我看来,我必须记住我正在使用哪种风格,因为如果我想要访问model1model2,那么有两种不同的方式:

var m1 = this.model.get('model1');

或第二种方案中的这种方式:

var m1 = this.model.model1;

你认为哪个更好?你如何组织所有的模型和观点?

谢谢!

2 个答案:

答案 0 :(得分:3)

除非有理由链接您的模型,否则我不会创建聚合其他模型的新模型。第二种选择更好,因为你没有链接它们。

我更愿意将它们进一步分开:

var view = new TheView({purchases: purchasesModel, user: userModel });

然后,在视图中,您没有引用this.model,而是专门引用this.purchasesthis.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/