var MyRouter = Backbone.Router.extend({
router : {
'something' : 'method1',
'anotherthing' : 'method2'
},
method1 : function () {
if (!this.someView)
this.someView.close()
this.someView = new SomeView();
$('someElement').append(this.someView.render().el);
},
method2 : function() {
//do something
}
});
var SomeView= Backbone.View.extend({
initialize : function() {
$(window).on('resize',_bind(this.onResize, this));
},
onResize : function() {
alert('resized');
},
close : function() {
this.remove();
this.off();
this.undelegateEvents();
}
});
以上是我的代码示例。每当路由器渲染一个视图时,它都会解除绑定到现有视图的所有事件,以便它会释放并创建一个新视图。由于我已将 onResize 事件附加到窗口,因此对于 someView 的每个实例(从 #something 导航到 #anotherthing 并返回到 #something,这将取消绑定现有 this.someView 中的所有事件,并创建一个新的 this.someView 实例),它会将一个事件绑定到窗口,并且 onResize 方法会被多次触发,即使当前视图不在显示中(即我的路由器可能会显示在方法 2 中定义的一些其他视图)。我理解为什么它会被多次触发,但想知道是否有办法在骨干网或 jQuery 中处理这个问题,而不是将事件绑定到窗口的调整大小事件?
PS 我没有使用 jQuery.mobile,也不想使用任何额外的 javascript 插件,因为它会增加移动浏览器的负载。