我有这个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语句一定存在问题,但我是否正确使用该方法?
答案 0 :(得分:2)
函数changeFront:function(user)
期待"用户"对象传入其中。但是当您触发事件时,您没有指定要传递的参数( user )。
我猜你何时试图访问" user.role"它引发了一个异常,因为user为null并且你试图转到null.role。
您可能会将事件侦听器的第三个参数与函数的参数混淆。 app.on的第三个参数实际上是上下文而不是参数。该参数需要由触发器传递。所以你可以做类似
的事情home: function(){
App.trigger('showFrontBtn', {role: "Admin"});
}