我在 Backbone 中创建了一个视图(列表容器),它应该包含多个视图项(部分),并处理某些事件。这种情况下的问题是,事件的执行频率与子视图项放置在容器内的频率一样高。
我知道如果我将 closeSection 方法放入 Container 视图中,我可以防止这种影响,但我认为这是一个错误的地方,专注于完整的工作视图。
在 Backbone.js 上下文中解决此问题的最佳解决方案是什么?
例子:
// The Container View (simplified)
var Container = Backbone.View.extend({
el:$('#someDivContainer'),
render:function(){
$(this.el).html('<div id="head"></div><div id="sections"></div>');
return this;
}
});
// The subview (simplified)
var subView = backbone.View.extend({
template:_template('<div><div class="scthd"><a class="op_cl">x</a></div><div><%- content %></div></div>');
events:{
'click a.op_cl':'closeSection'
},
initialize:function(){
this.setElement($('#sections');
},
closeSection:function(event){
event.preventDefault();
console.log('event was triggered');
},
render:function(){
$(this.el).append(this.template({content:'Test ' + i});
return this;
}
});
var oContainer = new Container();
oContainer.render().el;
// These produces a ten time event execution by a click on one a.op_cl item
for(var i=0; i<10; i+=1){
var oSubView = new subView();
oSubView.render().el;
}
“最终”输出类似于以下示例:
<!-- The HTMl of the first view -->
<div id="head"></div>
<div id="sections">
<div>
<div class="scthd">
<a class="op_cl">x</a>
</div>
<div>Test 0</div>
</div>
<div>
<div class="scthd">
<a class="op_cl">x</a>
</div>
<div>Test 1</div>
</div>
<div>
<div class="scthd">
<a class="op_cl">x</a>
</div>
<div>Test 2</div>
</div>
<div>
<div class="scthd">
<a class="op_cl">x</a>
</div>
<div>Test n</div>
</div>
</div>
提前谢谢。