2014-11-21 28 views
-1

我有这个骨干应用程序,用户和管理员可以登录和注销。现在管理员有多种选项可以在不同的页面上添加功能,因此,我有一个管理菜单,它应该只显示相关页面上的相关按钮。我想使用trigger-方法,但无法正常工作。因此可以这么说,管理员应该有可能在首页上改变一些东西,所以只有在浏览首页时才能看到特定的按钮。这是我做过什么至今:如何使用骨干的触发方法

Router.js:

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

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

然后在自己的管理,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

*“事情是,我真的变成了戒备”* - 你成了什么......?! – 2014-11-21 13:18:43

+0

'alert('works')' - 我将修改文字 – Steve 2014-11-21 13:19:57

+3

'Admin-Menu.View'是一个有效的变量名称。 – 2014-11-21 13:20:18

回答

2

功能changeFront:function(user)正在等待一个“用户”对象传递给它。但是,当您触发事件时,您未指定要传递的参数(用户)。

我猜你试图访问“user.role”时,它抛出一个异常,因为用户为空,你试图去null.role。

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

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