我正在制作一个 Backbone.js 应用程序,它包括一个索引视图和几个基于 id 的子视图。所有的视图都绑定了 mousedown 和 mouseup 事件。但是每次从一个子视图转到索引视图,然后再转到任何一个子视图时,当前子视图中的mousedown和mouseup事件都会再触发一次,也就是说当我点击子视图时,会有几个连续的触发 mousedown 事件之后会触发几个连续的 mouseup 事件。
看了我的代码,终于发现是路由器导致了这个问题。我的部分代码如下:
routes: {
"": "index",
"category/:id": "hashcategory"
},
initialize: function(options){
this._categories = new CategoriesCollection();
this._index = new CategoriesView({collection: this._categories});
},
index: function(){
this._categories.fetch();
},
hashcategory: function(id){
this._todos = new TodosCollection();
this._subtodolist = new TodosView({ collection: this._todos,
id: id
});
this._todos.fetch();
}
可以看到,我initialize
是在路由器的方法中创建索引集合和视图,但是我在路由器对应的路由函数中创建子视图集合和视图。我尝试将索引集合和视图放在index
函数中,索引视图中的单击事件的行为方式与子视图相同。所以我认为这就是为什么 mousedown 和 mouseup 会被触发多次。
但问题是,我必须使用id
作为发送到子视图的参数之一。所以我不能在initialize
方法中创建子视图。更重要的是,我已经看到别人的项目基于Backbone,其中一些还在相应的路由功能中创建子集合和视图,但他们的应用程序运行完美。所以我不知道我的问题的根源是什么。有人可以给我一些想法吗?