backbone.js - 视图中的控制器属性

问题描述:

我有一个名为authenticated的控制器属性,其默认值为false。但是,在我的登录视图中,我需要能够将其设置为true。另外,在我的注销视图中,我需要能够将其设置为false。如何在视图中公开此属性?backbone.js - 视图中的控制器属性

var Controller = Backbone.Controller.extend({ 
    ... 
    authenticated: false, 

    login: function() { 
     if(this.authenticated) 
     { 
      location.hash = '!/dashboard'; 
     } else { 
      new LoginView(); 
     } 
    }, 

    logout: function() { 
     $.post('/admin/logout', {}, 
     function(resp){ 
     }, "json"); 

     this.authenticated = false; 
     location.hash = '!/login'; 
    } 
    ... 
}); 

您的控制器正确地执行登录和注销功能。所有你需要做的是让你的视图fire backbone.js事件,并让控制器注册来接收这些事件。

在您的控制器

某处,你需要的东西,如:

var loginView = new LoginView(...); // params as needed 
loginView.bind("login_view:login", this.login); 
loginView.bind("login_view:logout", this.logout); 
loginView.render(); 

此外,您还需要确保控制器设置为处理事件,因此需要在你的初始化函数是这样的:

_.extend(this, Backbone.Events); 
_.bindAll(this, "login", "logout"); 

您的视图将需要事件代码,因此请务必将_.extend(...)调用添加到其初始化中。

您认为在适当情况下,你需要:

this.trigger("login_view:login"); 

this.trigger("login_view:logout"); 

最后一点,让控制器做登录和注销服务器调用。您从视图中需要的只是一个事件并且可能是人口稠密的模型或数据。该数据将作为触发语句中的参数传递,并将作为登录/注销功能中的参数接收。但是,我没有在代码中包括这个。

您基本上想要视图来管理DOM并将应用程序事件向控制器冒泡。然后控制器可以与服务器进行调解并管理任何必要的视图。