我有一个Ember.js,我希望在应用程序模板(或部分模板)上有一个菜单“bar”。菜单是通用的,但有一些应由路由器或控制器控制的选项/属性,例如,某些路由(如登录)不应显示“返回”按钮。
我也希望避免路由器或控制器级别的样板,但我发现我设计的解决方案不太理想。这是我做的:
controllers/application.js:
showBackButton: function() {
var v = this.controllerFor(this.currentRouteName).get('showBackButton');
return (Ember.isEmpty(v) ? true : v);
}.property()
因为模板不会在路线变化之间更新:
routes/application.js:
didTransition: function() {
this.controller.propertyDidChange('showBackButton');
return true;
}
这允许我在控制器上为属性定义一个新值,它可以工作。但我有两个问题:
有没有更好的方法,无需为每个模板/控制器添加代码或使用基类?
答案 0 :(得分:0)
您可以在路由级别管理它吗? 由于相关是活动路线,而不是控制器。
I have built an example on jsbin.
我认为你应该处理ApplicationController
的财产。您可以使用willTransition
和didTransition
挂钩来设置属性,具体取决于您当前的控制器。其余的是自定义代码,具体取决于您的确切需求。