一,new 一个新的View对象时,最好把,el参数传进去;而不是在view里面操作view的外部节点。
比如:
外部调用 var view=new BankboneView({el,$('body')});
view内部: $(this.el).html(-template(...))
二,如果所有的外部传入el都是同一个时,会造成事件的多次重复绑定。
产生的原因是,backbone的view内部,事件的绑定都是基于this.el,$el这2个的,而我们在外部调用都用了同一个el,没有销毁过el节点。
解决办法:
采用动态创建的节点作为view的外部el节点。比如
$('body').html('<div class="main"></div>')
new view({el:$('.main')})
三,model也会发生多次事件绑定
产生的原因:由于有些model在整个应用当中,产生之后,一直没有销毁,那么如果view中,一般绑定的事件采用
model.bind('all',function(){
.....
});
当这个view被多次执行的时候,每次model数据变更,就会多次的执行绑定的事件;
解决办法:model.unbind().bind(.....);
四,underscore的_.bindAll() 函数
这个函数可以把,指定的函数的执行上下文绑定到第一个参数;
例如执行:
_.bindAll(this,'render','show')
之后,页面代码可以这样使用:
collection.bind('all',this.render)
原文地址:http://hi.baidu.com/mishe/item/511ceb55d7196809e6c4a563