2012-06-20 100 views
0

我最近開始學習骨幹,想知道在骨幹模型中分組模型屬性的最佳方法是什麼?我正在考慮有一個專門的視圖來處理模型屬性的一個子集。例如,如果我有一個汽車模型,並且我想分組關於引擎的所有信息,以便我可以將這些屬性傳遞給某個視圖,也許?像car.engine_info分組模型屬性 - 骨幹

Car = Backbone.Model.extend({ 
    initialize: function() { 
     this.engine_info = this._set_engine_info(); 
    } 
    _set_engine_info: function() { 
     return {displacement:this.get('displacement'), horsepower: this.get('horsepower')}; 
} 

回答

3

東西,你應該考慮多個模型,而不是返回一個單獨的數據集。這些數據在事件處理和更新方面沒有背後的支撐力量。您正在創建一個只有屬性和值的新對象。

而是讓模特的每個組件

汽車有 - 發動機,特徵等

Engine = Backbone.Model.extend({ 
    defaults: { 
     cylinders: 4, 
     horsepower: 180 
    } 
}); 

Features = Backbone.Model.extend({ 
    defaults: { 
     powerwindows: true, 
     airconditioning: true 
    } 
}); 

然後通過重寫構造

Car = Backbone.Model.extend({ 
    defaults: function() { 
     return { 
     engine: new Engine(), 
     features: new Features() 
     }; 
    }, 
    constructor: function (attrs) { 
     attrs || (attrs = {}); 
     if (attrs.engine) { 
      attrs.engine = new Engine(attrs.engine); 
     } 
     // etc 
     Backbone.Model.prototype.constructor.call(this, attrs); 
    } 
}); 
混入設置成汽車模型的功能

另一種選擇是創建一輛汽車並創建一些添加功能的修飾器功能,但坦率地說,我更喜歡列出的方法。現在你可以有單獨的組件聽自己的變化

var car = new Car({ 
    engine: { // props }, 
    features: { //props } 
}); 

car.get('features').on('change:powerwindows', // some function, this); 

背後所有這一切的真正的力量是分離汽車的整體功能集責任。汽車不應該擔心它的所有部件。讓引擎擔心引擎,讓功能擔心功能。

+0

作爲附錄,您應該重寫parse方法而不是構造方法,以防萬一您決定從服務器更新整個汽車並在overriden構造函數中傳遞'{parse:true}'作爲選項。它的行爲方式類似。 – Trevor