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并将应用程序事件向控制器冒泡。然后控制器可以与服务器进行调解并管理任何必要的视图。