如何使用Backbone的触发方法

时间:2014-11-21 13:10:58

标签: javascript jquery backbone.js

我有这个Backbone App,用户和管理员可以登录和注销。现在管理员有多个选项可以在不同的页面上添加功能,所以为此,我有一个管理菜单,它应该只显示相关页面上的相关按钮。我想使用trigger - 方法,但无法使其正常工作。因此,假设管理员应该有可能在首页上更改某些内容,因此只有在导航到首页时才能看到特定按钮。这就是我到目前为止所做的:

Router.js:

routes: {
    '': 'index',
    'home': 'home'
}

home: function(){
  App.trigger('showFrontBtn');
}

然后在我的Admin-MenuView.js上:

Admin-Menu.View = Backbone.View.extend({
    tagName: 'div',
    template: 'adminMneu',
    initialize: function() {
        this.render();
        App.on('showFrontBtn', this.changeFront, this);             
    },

    changeFront:function(user){
        alert('works!')
        if(user && user.role === 'admin'){
            $('.frontBtn').show();
        } else {
            $('.frontBtn').hide();
        }
    },

问题是它实际上返回alert('works'),所以我假设if语句一定存在问题,但我是否正确使用该方法?

1 个答案:

答案 0 :(得分:2)

函数changeFront:function(user)期待"用户"对象传入其中。但是当您触发事件时,您没有指定要传递的参数( user )。

我猜你何时试图访问" user.role"它引发了一个异常,因为user为null并且你试图转到null.role。

您可能会将事件侦听器的第三个参数与函数的参数混淆。 app.on的第三个参数实际上是上下文而不是参数。该参数需要由触发器传递。所以你可以做类似

的事情
home: function(){
  App.trigger('showFrontBtn', {role: "Admin"});
}