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

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)

Bil*_*uer 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();
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并将应用程序事件冒泡到控制器.然后,控制器可以与服务器协调并管理任何必要的视图.