我想设置一些状态变量,只有当我在我的app的admin部分(即任何以/ admin开头的url)时,才可以将css类添加到我的标题模板中。我有以下路线:
this.resource('admin', { path: '/admin' }, function() {
this.route('dashboard', { path: '/' });
// more admin routes...
}
this.route('user')
// more routes...
以下是我的ApplicationRoute中的setupController
:
App.ApplicationRoute = App.Route.extend({
setupController: function(){
this.controllerFor('header').set('isInAdmin', false);
}
}
在AdminRoute中也一样:
App.AdminRoute = App.Route.extend({
setupController: function(){
this.controllerFor('header').set('isInAdmin', true);
}
});
这很好但是一旦我导航到管理路由,然后导航回非管理员路由,我不知道如何重置isInAdmin变量。
答案 0 :(得分:4)
应用程序控制器有computed property名为currentPath
。该属性与当前路径相同,例如,转换为admin/dashboard
将在currentPath中返回admin.dashboard
,转到/foo
返回foo
等。
因此,您可以使用以下代码了解何时输入管理路由:
App.ApplicationController = Ember.Controller.extend({
isInAdmin: function() {
var currentPath = this.get('currentPath');
// if the first hierarchy is admin, so is a admin route
return currentPath.split('.')[0] === 'admin';
}.property('currentPath')
});
在您的申请模板中isInAdmin
将是可用的:
<script type="text/x-handlebars" data-template-name="application">
...
<div {{bind-attr class=isInAdmin}}>
...
</div>
...
</script>
看看这个小提琴,看看这个行动http://jsfiddle.net/marciojunior/j5PRe/
答案 1 :(得分:0)
我刚读过Ember.Route上的deactivate
钩子:
http://emberjs.com/api/classes/Ember.Route.html#method_deactivate
当路由器完全退出此路由时,将执行此挂接。它 当路线的模型改变时,不会执行。
所以我补充道:
App.AdminRoute = App.Route.extend({
deactivate: function(){
this.controllerFor('header').set('isInAdmin', false);
}
});
也有效,但Márcio的回答可能有点整洁