Mat*_*hew 6 javascript jquery backbone.js underscore.js
我有一个控制器属性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';
}
...
});
Run Code Online (Sandbox Code Playgroud)
您的控制器正在执行登录和注销功能.您需要做的就是让您的视图触发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();
Run Code Online (Sandbox Code Playgroud)
此外,您需要确保控制器设置为处理事件,因此初始化函数需要这样的事情:
_.extend(this, Backbone.Events);
_.bindAll(this, "login", "logout");
Run Code Online (Sandbox Code Playgroud)
您的视图需要事件代码,因此请务必将_.extend(...)调用添加到其初始化中.
在您认为适当的情况下,您需要:
this.trigger("login_view:login");
Run Code Online (Sandbox Code Playgroud)
和
this.trigger("login_view:logout");
Run Code Online (Sandbox Code Playgroud)
最后,您需要控制器执行登录和注销服务器调用.从视图中您所需要的只是一个事件,否则可能是一个填充的模型或数据.此数据将作为触发器语句中的参数传递,并将作为登录/注销函数中的参数接收.但是,我没有在代码中包含它.
您基本上希望视图管理DOM并将应用程序事件冒泡到控制器.然后,控制器可以与服务器协调并管理任何必要的视图.
| 归档时间: |
|
| 查看次数: |
1821 次 |
| 最近记录: |