Backbone.js 主干网查看在路由中重复触发的事件
我有一个包含路由器文件和一些视图的应用程序,我还使用它向路由添加视图,并向视图添加模板。这是我的密码: routes.jsBackbone.js 主干网查看在路由中重复触发的事件,backbone.js,requirejs,backbone-views,backbone-events,backbone-routing,Backbone.js,Requirejs,Backbone Views,Backbone Events,Backbone Routing,我有一个包含路由器文件和一些视图的应用程序,我还使用它向路由添加视图,并向视图添加模板。这是我的密码: routes.js var AppRouter = Backbone.Router.extend({ routes: { "": "getLogin", "login": "getLogin", "register": "getRegister", "forget-password": "getForgetPassword" }, getLogin: funct
var AppRouter = Backbone.Router.extend({
routes: {
"": "getLogin",
"login": "getLogin",
"register": "getRegister",
"forget-password": "getForgetPassword"
},
getLogin: function() {
require(['views/auth/loginView'], function(view) {
view = new this.LoginView();
});
},
getRegister: function() {
require(['views/auth/registerView'], function() {
view = new this.RegisterView();
});
},
getForgetPassword: function() {
require(['views/auth/forgetPasswordView'], function() {
view = new this.ForgetPasswordView();
});
},
});
var route = new AppRouter();
Backbone.history.start();
var LoginView = Backbone.View.extend({
el: '#wrapper',
initialize: function() {
NProgress.start();
this.render();
},
render: function() {
require(['text!partials/auth/login.html'], function(t) {
var json = { title: 'title', formName: 'frmLogin' };
var template = _.template(t);
$('#wrapper').html(template(json));
});
NProgress.done();
},
events: {
"click #btnLogin": "login"
},
login: function(e) {
e.preventDefault();
alert('some message');
}
});
loginView.js
var AppRouter = Backbone.Router.extend({
routes: {
"": "getLogin",
"login": "getLogin",
"register": "getRegister",
"forget-password": "getForgetPassword"
},
getLogin: function() {
require(['views/auth/loginView'], function(view) {
view = new this.LoginView();
});
},
getRegister: function() {
require(['views/auth/registerView'], function() {
view = new this.RegisterView();
});
},
getForgetPassword: function() {
require(['views/auth/forgetPasswordView'], function() {
view = new this.ForgetPasswordView();
});
},
});
var route = new AppRouter();
Backbone.history.start();
var LoginView = Backbone.View.extend({
el: '#wrapper',
initialize: function() {
NProgress.start();
this.render();
},
render: function() {
require(['text!partials/auth/login.html'], function(t) {
var json = { title: 'title', formName: 'frmLogin' };
var template = _.template(t);
$('#wrapper').html(template(json));
});
NProgress.done();
},
events: {
"click #btnLogin": "login"
},
login: function(e) {
e.preventDefault();
alert('some message');
}
});
另外,registerView.js
和forgetPasswordView.js
与loginView.js
类似
现在当我多次更改路由并点击#btnLogn
时,它会触发警报(“某些消息”)代码>功能多次 您是否尝试过视图中有关路线更改的事件
您可以覆盖AppRouter
中的route
方法(),并在渲染每个路由之前运行它
route: function(route, name, callback) {
view.undelegateEvents();
return Backbone.Router.prototype.route.apply(this, arguments);
}
注意:只是一个想法,没有用你的代码测试你有两个路由器方法中的意外全局视图
s。您正在创建绑定到#wrapper
(在我看来这是个坏主意)的视图,而不是让视图创建并拥有自己的el
s。我看不到任何view.remove()
调用,这样您就不用费心破坏视图了,而且还存在内存泄漏和僵尸视图。修复所有这些,然后再试一次。@muistoshort我认为你是对的。。。!让我试试。@muistoshort你有什么建议?你能帮我吗?@543310你应该保留对已创建视图的引用。在创建另一个之前,请先删除现有的。。。