无法解除绑定并关闭我的主干路由器中的事件
Cannot unbind and close events in my Backbone router
在加载新视图之前,我想清理Backbone中的视图。
为此,我搜索并向Backbone对象添加了一个名为close的原型属性:
Backbone.View.prototype.close = function () {
this.$el.empty();
//this.$el.unbind();
this.undelegateEvents();
console.log('close');
};
附言:empty()似乎不起作用,unbind也不起作用——undelegateEvents起作用。
现在,我似乎不知道如何在路由器上调用关闭功能:
define([
'jquery',
'underscore',
'backbone',
'views/userList',
'views/addUser'
], function ($, _, Backbone, UserList, AddUser) {
var Router = Backbone.Router.extend({
routes: {
'' : 'home',
'new' : 'addUser'
}
});
var initialize = function () {
var router = new Router();
router.on('route:home', function () {
userList = new UserList();
userList.render();
});
router.on('route:addUser', function () {
addUser = new AddUser();
addUser.render();
});
Backbone.history.start();
}
return {
initialize : initialize
}
});
有什么想法吗?
首先,不要使用close
,只需覆盖标准的remove
方法:
var SomeBaseView = Backbone.View.extend({
remove: function () {
this.$el.empty(); // Instead of this.$el.remove();
this.stopListening();
this.undelegateEvents();
return this;
}
});
然后从CCD_ 3中导出您的所有视图。应避免与Backbone.View.prototype
混在一起。
然后,停止使用这样的全局变量:
userList = new UserList();
在您的路由处理程序中。
然后,开始跟踪当前打开的视图,以便在抛出下一个视图之前可以对其调用remove
。一个更像这样的路由器:
var Router = Backbone.Router.extend({
routes: {
'' : 'home',
'new' : 'addUser'
},
home: function() {
if(this.currentView)
this.currentView.remove();
this.currentView = UserList();
this.currentView.render();
},
addUser: function() {
if(this.currentView)
this.currentView.remove();
this.currentView = AddUser();
this.currentView.render();
}
});
您会放弃router.on
调用,因为使用这种方法您不需要它们。
相关文章:
- 在Angular ui路由器中,如何将事件从一个视图发送到另一个视图
- Iron:路由器在更改路由器上添加事件
- 未从url激发事件上的主干路由器
- 无法解除绑定并关闭我的主干路由器中的事件
- 主干路由器导航到../#/<路由>而不触发路由器事件.如何
- 在一个控制器 ui 路由器中的所有 $state.go() 事件之前运行 check
- 带路由器的流星 - 模板事件未触发
- 从应用路由器触发事件
- 在 ui 路由器状态之间发送事件
- 一个“;监听路由器”;(响应视图/模型中的路由器事件)
- Angular 2路由器全局状态更改事件
- Marionette事件聚合器vs主干路由器
- 主干路由器创建多个视图,从而导致多个事件绑定到同一视图
- Ember.js-在控制器/路由器链上传播事件
- Emberjs常见路由器事件
- 访问页面时未触发主干网/Marionette路由器事件
- 如何在Backbone.js中跟踪路由器更改事件
- 路由器(发射器)和处理器(监听器)中的Node.js事件
- React-router:从路由器获取参数,监听事件失败
- Angular UI路由器:我应该在哪里改变状态?控制器吗?服务?事件监听器