2014-01-17 59 views
4

我在主幹中有一個與其關聯的視圖和模型。觀察模型變化並相應地更改其顯示區域。例如:如何在一個處理程序中處理多個主幹模型更改

var Part = Bacbone.Model.extends({ 
    defaults:{ 
    partId = null, 
    manufacturer: null, 
    manufactureDate: null, 
    type: null 
    } 
}); 

var PartsCollection = Backbone.Collection.extends({ 
    model:Part; 
)}; 

var Car = Backbone.Model.extends({ 
    defaults:{ 
     carModel: null, 
     carName: null, 
     color: null, 
     partsCollection: null 
    }, 
    //Overwite the parse method to fill partsCollection 
    parse: function(response){ 
     // creating partsCollection from response and adding an attribute 
     // response.partsCollection = new PartsCollection(); 
     retrun response; 
    } 
}); 

我有一個類似於上面顯示的結構。在我的設計策略中,當模型更改時,我正在更改視圖內容。

所以,現在,因爲如果我在1000份與製造商「B」更換製造商「A」出的5000份的實施例。這應該修改我的觀點,因爲我在我看來正在傾聽模型改變事件。由於1000個零件的修改,1000個更改事件將被觸發。

由於製造商改變我也想改變零件模型的「manufacturerDate」屬性,如果我改變「manufacturerDate」 ATTR過這反過來又會引發另一個1000個事件。

處理在我看來,這些多事件可能不是一個好主意,這就是我的感覺。因此,可以在任何一個可以建議我解決這個問題

+0

你這樣做完全錯了!爲什麼千變萬化?!最終用戶是否可以在一個地方看到他們的全部?我用todomvc(1000+ todos)編寫了一個非常繁重的測試,並提出了angularjs比其他例子更快的想法。我也爲這個案例開始了一個項目(Lilith.js,還沒有準備好的骨幹分支,速度很快,你仍然可以從中獲得想法!)。順便說一下,我可以推薦3種選擇:使用react.js或其他框架,根據您的需要使用另一種綁定方法或庫,不要做1000次更改! –

回答

0

我不認識路,這是否會做正確的方式,但我帶着下面的解決方案。不要直接在CarView上傾聽Part模型的變化。取而代之的是在CarView在車型this.model.partsCollection中爲收藏添加change:manufacturer事件的收聽者。在集合上添加一個API changeManufacturer,該集合接受一系列零件(或零件ID)和新的製造商詳細信息。該API將更新零件的製造商和觸發事件change:manufacturer想要改變零件的製造商在一個鏡頭將使用收集API changeManufacturer和Carview會可以收聽事件change:manufacturer和自我更新的任何代碼。

var CarView = Backbone.View.extend({ 
    initialize: function() { 
     // do other stuffs 
     this.listenTo(this.model.partsCollection, "change:manufaturer", manufacturereChanged); 

    }, 

    manufacturereChanged: function(arrOfChangedParts) { 
     // you now have all changed parts array 
     // process as your logic 
    } 
}); 


var PartsCollection = Backbone.Collection.extend({ 
    model: Part, 
    changeManufacturer: function(arrPartIds, newManfacturerDetails) { 
     var arrChangedModels = []; 
     // iterate over ids 
      // get the model and change manufacturer info in model 
      // add changed model to arrChangedModels 
     // ends loop 

     // once all models are changed trigger an event "change:manufacturer" 
     this.trigger('change:manufacturer', arrChangedModels) 
    } 
}); 
0

收藏有聽的變化,因爲它的模式,除了有更多的選擇,以確定從先前收集的差異和新的價值觀相同的能力。

理想情況下,一個觸發器應該更好地與更新視圖與n項。

相關問題