Javascript 主干模型更改和视图渲染更新
我有一个在后端带有会话的express应用程序,在前端我有主干+RequireJS。我的问题在于我拥有的会话模型,以及触发视图上呈现方法的更改事件 因此:Javascript 主干模型更改和视图渲染更新,javascript,node.js,backbone.js,express,requirejs,Javascript,Node.js,Backbone.js,Express,Requirejs,我有一个在后端带有会话的express应用程序,在前端我有主干+RequireJS。我的问题在于我拥有的会话模型,以及触发视图上呈现方法的更改事件 因此: 该应用程序有一个主视图,它有一个会话模型“更改”事件的侦听器,并运行“render”方法 没有凭据的用户从主页进入公共页面,比如to/about 其中,用户从具有登录表单(用户/密码)的标题登录 由于第1项中的侦听器,container元素获得了一个更新的主内容,但用户仍然在/about中 因此,问题是:如何避免这种不良行为,使视图只在正确的
"use strict";
var SessionModel = Backbone.Model.extend({});
var sessionModel = new SessionModel();
var HomeView = Backbone.View.extend({
initialize: function() {
this.listenTo(sessionModel, "change", this.render);
},
render: function() {
// updates the main container element
}
});
var AppRouter = Backbone.Router.extend({
"": "home",
"about": "about"
});
var appRouter = new AppRouter();
appRouter.on("route", function() {
sessionModel.fetch(); // Updates session model on every route change
});
appRouter.on("route:home", function() {
var homeView = new HomeView();
homeView.render();
});
您可以侦听expecific属性,而不是侦听各种更改
this.bind("change:SomeExpecificThing", doEspecificThing)
我找到了解决问题的方法:
sessionModel.on("change", function () {
Backbone.history.loadUrl();
}).fetch();
这样,我们就触发了正确的路由,并在不向视图中添加侦听器的情况下再次渲染。问题是否真的在于
/about
上的用户,但是HomeView
仍然存在?通常,当从/
切换到/about
时,您会破坏旧视图并抛出一个新视图。您能解释一下为什么需要在特定视图中收听会话模型的更改吗?它不应该在路由器
初始化
函数中。我将尝试销毁解决方案,因为我需要sessionModel随时存在。在当前结构中,更改仍然会触发HomeView的“render”方法,并替换主容器的内容。问题不在于属性的变化,而在于事件侦听器。