2011-11-12 148 views
0

模型的數量在我的應用程序中快速增長。我想知道關於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; 

你認爲哪個更好?你如何組織所有模型和視圖?

謝謝!

回答

3

除非有理由鏈接你的模型,否則我不會創建一個聚合其他模型的新模型。第二種選擇更好,因爲你沒有鏈接它們。

我喜歡他們甚至進一步分離:

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

然後,視圖內,而不是引用this.model,您引用this.purchasesthis.user明確。

你看,model屬性的意見是真的只是一個約定。在視圖中model屬性沒有什麼特別之處,只不過model屬性會在構造函數中自動複製。除此之外,沒有提及Backbone.View中的model

當然,這意味着你需要用它做什麼:

var TheView = Backbone.View.extend({ 
    initialize: function(options) { 
     this.purchases = options.purchases; 
     this.user = options.user; 
    } 
}); 

這樣,你顯式說明您需要的多個模型。我比2號版更喜歡這個,因爲你對視圖的要求沒有明確的要求。

+0

很好,感謝您輸入Bri-guy! –

+0

我只是想補充一點,它知道'model'只是一個約定,並不是什麼特別的東西,這真的很有幫助。 –

+1

:)很高興幫助。如有疑問,我參考(註釋的來源)[http://documentcloud.github.com/backbone/docs/backbone.html]。這是一個很好的方式讓你的頭腦發生什麼事情。 –