backbone.js 为每个视图触发的常见事件
backbone.js common event triggered for every view
我是 backbone 的新手,负责扩展和维护 backbone 应用程序。
我遇到了一个问题,即 'log out' 按钮在加载每个视图时都会触发。我已经为常见的视图事件创建了一个基础class:
BaseView = Backbone.View.extend({
logout: function() {
console.log('logout');
},
events: {
'click .logout':'logout'
}
})
然后我在相关视图中继承这个
DashboardView = BaseView.extend({
el : '#app',
render: function(){
this.$el.html( _.template($('#Dashboard').html()) );
return this;
}
})
使用的模板中有按钮
<div class="logout"></div>
有四个视图组成了我正在处理的网站部分,如果所有四个视图都已加载,则在单击时会触发 4 次注销。
我已经尝试了几种方法来解决这个问题,例如在视图更改时解除绑定以及 setElement 没有成功。
首先,这是我应该解决的问题吗?如果是这样,我该怎么做?
干杯
Backbone 使用 jquery 的 on
注册 DOM 事件。
当您实例化 4 个视图时,如果 4 个事件侦听器都定义了相同的 parent 元素,则它们将绑定到相同的元素。
就个人而言,如果我当前位于需要身份验证的页面中,我倾向于使用 window.location.href
创建重定向。如果我在不需要身份验证的页面中,我只是 re-render header,用登录 (/register) 按钮替换用户名。
我想我找到了解决办法。
在我现在调用的事件函数中 this.undelegateEvents();
例如:
showview : function() {
this.undelegateEvents();
app.appRouter.navigate("/dashboard", true);
}
并且在 appRouter 函数的 app.js 中我调用 this.DashboardView.delegateEvents();
所以:
app.appRouter.on('route:dashboard', function(){
app.dashboard = new DashboardView();
app.dashboard.render();
app.dashboard.delegateEvents();
)}
我很想知道这个解决方案是否有任何问题。
此致
我是 backbone 的新手,负责扩展和维护 backbone 应用程序。
我遇到了一个问题,即 'log out' 按钮在加载每个视图时都会触发。我已经为常见的视图事件创建了一个基础class:
BaseView = Backbone.View.extend({
logout: function() {
console.log('logout');
},
events: {
'click .logout':'logout'
}
})
然后我在相关视图中继承这个
DashboardView = BaseView.extend({
el : '#app',
render: function(){
this.$el.html( _.template($('#Dashboard').html()) );
return this;
}
})
使用的模板中有按钮
<div class="logout"></div>
有四个视图组成了我正在处理的网站部分,如果所有四个视图都已加载,则在单击时会触发 4 次注销。
我已经尝试了几种方法来解决这个问题,例如在视图更改时解除绑定以及 setElement 没有成功。
首先,这是我应该解决的问题吗?如果是这样,我该怎么做?
干杯
Backbone 使用 jquery 的 on
注册 DOM 事件。
当您实例化 4 个视图时,如果 4 个事件侦听器都定义了相同的 parent 元素,则它们将绑定到相同的元素。
就个人而言,如果我当前位于需要身份验证的页面中,我倾向于使用 window.location.href
创建重定向。如果我在不需要身份验证的页面中,我只是 re-render header,用登录 (/register) 按钮替换用户名。
我想我找到了解决办法。
在我现在调用的事件函数中 this.undelegateEvents();
例如:
showview : function() {
this.undelegateEvents();
app.appRouter.navigate("/dashboard", true);
}
并且在 appRouter 函数的 app.js 中我调用 this.DashboardView.delegateEvents();
所以:
app.appRouter.on('route:dashboard', function(){
app.dashboard = new DashboardView();
app.dashboard.render();
app.dashboard.delegateEvents();
)}
我很想知道这个解决方案是否有任何问题。
此致