我的代码结构如下:
hTrackView contains:
measureView contains:
//several instatianted views, not stored in a collection or an array
measureRepView0,
measureRepView1,
...
measureRepViews(mRVs)上有许多变量,其中一些与mRV的其他实例共享。
根据以下情况,当我们添加,删除或编辑其中一个共享变量时,就会出现问题:
我们已经看到了包含bind()
和bindAll()
的示例,因此在父testView的初始化中我们实现了这一点:
initialize: function(options){
// Given a list of variables 'options', set the variables of this to those of options
// e.g. this.x = options.x
if (options) {
for (var key in options) {
this[key] = options[key];
}
this.el = '#measure-container-'+options.parent.cid;
}
this.newMeasureRepViews = [];
_.bindAll(this, 'render');
this.listenTo(this.measureRepresentations, 'remove', _.bind(this.render, this));
this.listenTo(this.measureRepresentations, 'add', _.bind(this.render, this));
this.model.on('change:scale', _.bind(this.render, this));
this.collectionOfMeasures.on('add', _.bind(this.render, this));
this.collectionOfMeasures.on('remove', _.bind(this.render, this));
this.render();
}
在这个程序中可能存在竞争的哲学或代码结构,抱歉,我们正在学习。当我们添加或删除并且DOM正确更新时会出现真正的问题,但是我们会忘记Backbone View对象本身。例如,从一个干净的平板开始,我们有一个mRV,cid为26(我们从视图本身拉出它并将它放在DOM上的id中)。然后我们添加一个mRV,现在我们有&# 39; C55'和' c57'我很好,Backbone删除了26,因为它重新实现了它的55版本。但是,当我们试图操纵55时,它出现了一个未定义的错误。我们追溯到这个特定mRV属性的问题,并注意到应用程序中有3个Backbone Views [26,55,57](其中应该有两个[55,57])。那么在给出三种情况(添加,删除,更改)的情况下,我如何正确设置以删除骨干视图和DOM表示?
供参考:
在measureView.js中:
render: function(){
var compiledTemplate = _.template( MeasureTemplate, measureTemplateParameters );
// If we are adding a rep, clear the current reps, then add the template
while(this.newMeasureRepViews.length >0) {
var deleting = this.newMeasureRepViews.pop();
deleting.stopListening();
delete deleting;
}
// I'm assuming this isn't correct, and the DOM should be coupled to the View, so that when the View is deleted the DOM is as well.
// Maybe we call this.destroy() or this.remove() here?
$(this.el).html(''); // clear the html
// append the new completed compiled template
$(this.el).append( compiledTemplate )
...
}
回顾一下,我想知道