我有一个View和一个与骨干相关的模型。查看观察模型更改并相应更改其显示区域。例如:
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;
}
});
我有一个类似于上面所示的结构。在我的设计策略中,我在模型更改时更改视图内容。
现在,例如,如果我用5000个零件中的1000个零件替换制造商'A'和制造商'B'。这应该修改我的视图,为此我在视图中监听模型更改事件。由于1000个零件修改,将触发1000个更改事件。
由于制造商的变化,我可能还想更改零件模型的'manufacturerDate'属性,如果我也改变'manufacturerDate'attr,那又将触发另外1000个事件。
在我看来处理这些事件可能不是一个好主意,这就是我的感受。所以任何人都可以建议我解决这个问题的方法
答案 0 :(得分:0)
我不知道,这是否是正确的方法,但我提出以下解决方案。不要直接在CarView中对 Part 模型进行更改。而是在 CarView 中为汽车模型change:manufacturer
中的集合添加this.model.partsCollection
事件的侦听器。在集合上添加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)
}
});
答案 1 :(得分:0)
除了有更多选项可以识别与先前集合和新值之间的差异之外,集合具有与其模型相同的收听变更的能力。
理想情况下,一个触发器应该可以很好地使用n项更新视图。