应用程序级菜单可在路由器/控制器级别配置

时间:2014-10-29 09:44:07

标签: ember.js handlebars.js

我有一个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;
}

这允许我在控制器上为属性定义一个新值,它可以工作。但我有两个问题:

  1. Ember 1.7显示了对于controllerFor方法的弃用警告,我知道新的“需求”功能正在替换,但在这种情况下有什么替代方案!?
  2. 只有最深的控制器可以拥有该属性,不知怎的,我应该横向控制器的层次结构,直到找到它。
  3. 有没有更好的方法,无需为每个模板/控制器添加代码或使用基类?

1 个答案:

答案 0 :(得分:0)

您可以在路由级别管理它吗? 由于相关是活动路线,而不是控制器。

I have built an example on jsbin.

我认为你应该处理ApplicationController的财产。您可以使用willTransitiondidTransition挂钩来设置属性,具体取决于您当前的控制器。其余的是自定义代码,具体取决于您的确切需求。