movieDb.Router = Backbone.Router.extend({
routes:{
'': 'landPage',
'home': 'landPage',
'login': 'login',
'signup': 'signup'
},
landPage: function(p){
$('div#homepage').empty();
},
login: function(p){
new loginViews(); // Calls its own model
},
signup: function(p){
new signupViews(); // Calls its own model
}
});
问题是来自注册和调用登录时,它还调用以前的模型请求(注册)同时导致登录和注册请求(我的模型是ajax请求),我该如何删除以前调用的模型我每次在视图中创建一个新请求。
感谢。
答案 0 :(得分:1)
我找到的最简单的方法是使用Backbone.Marionette https://github.com/derickbailey/backbone.marionette
它允许您使用单独的区域来执行单独的功能。
如果您不想拥有其他依赖性,可以手动执行:
http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/
但是如果你看到一个模型上的fetch正在调用另一个模型上的fetch,那么你可能在名称中有一个冲突,或者某种程度上导致第二次获取的事件的链接。
答案 1 :(得分:0)
我只是想分享一下我是如何解决这个问题的。(非常基本的方法,不确定这是不是最好的做法但是有效)
我用关闭函数
扩展了视图 Backbone.View.prototype.close = function () {
this.unbind();
this.undelegateEvents();
};
在我的路由器中创建了一个showView函数,每当我在视图中触发事件时都会调用它。
showView: function (view) {
//destroy current view
if(this.currentView !== undefined) {
this.currentView.close();
}
//create new view
this.currentView = view;
this.currentView.delegateEvents();
return this.currentView;
}
然后在我的视图中调用showView函数
addMovie: function(p){
this.showView(this.movieForm('add'));
}