骨干模型更改和视图渲染更新

时间:2014-07-27 18:17:37

标签: javascript node.js backbone.js express requirejs

我在后端有一个带会话的快速应用程序,在前面我有Backbone + RequireJS。我的问题在于我拥有的会话模型,以及在视图上触发render方法的change事件。

所以:

  1. 该应用有一个主页视图,有一个监听"更改"会话模型的事件,并运行"渲染"方法
  2. 没有凭据的用户从家中进入公共页面,让我们说/关于
  3. 在那里,用户从具有登录表单(用户/密码)的标题中登录。
  4. 由于第1项中的监听器,容器元素会使用新的主页内容进行更新,但用户仍处于/关闭状态。
  5. 所以,问题是:我如何避免这种不良行为,因此如果正确的路由处于活动状态,视图只会监听事件?

    代码示例:

    "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();
    });
    

2 个答案:

答案 0 :(得分:0)

您可以侦听特定属性,而不是倾听各种变化。

this.bind("change:SomeExpecificThing", doEspecificThing)

答案 1 :(得分:0)

我找到了解决问题的方法:

sessionModel.on("change", function () {
    Backbone.history.loadUrl();
}).fetch();

通过这种方式,我们可以触发正确的路线并再次渲染,而无需向视图添加侦听器。