我有一个名为authenticated
的控制器属性,默认为false
。但是,在我的登录视图中,我需要能够将其设置为true
。此外,在我的退出视图中,我需要能够将其设置为false
。如何在视图中公开此属性?
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';
}
...
});
答案 0 :(得分:7)
您的控制器正在执行登录和注销功能。您需要做的就是让您的视图触发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并将应用程序事件冒泡到控制器。然后,控制器可以与服务器进行协调并管理任何必要的视图。