在Ember设置中,在控制器上计算,但是在路径中的setupController内计算

时间:2016-03-24 15:26:33

标签: ember.js

我的应用程序只有一个应用程序路由,它设法没有显式的控制器文件。事实上,我根本没有控制器文件,并希望保持这种状态。

在我的应用程序路由中,我在控制器中设置了几个默认值,用于应用程序模板:

setupController(controller, model) {
  this._super(controller, model);

  controller.set('session', Ember.inject.service('session'));
  controller.set('environmentName', ENV.environment);
},

我现在想要一个能够响应两个不同变量的计算器。这些变量将在冒充应用程序路径的操作中发生变化。

所以说它们是foobar,就路线本身而言是计算的。

someComputed: Ember.computed('foo', 'bar', function() {
  let result = '';
  // logic involving foo and bar
  return result;
}),

问题是应用程序模板中没有此功能。如何以更好的方式向控制器“注册”计算,并响应更改foobar的应用程序路径操作?

1 个答案:

答案 0 :(得分:4)

即使您没有明确创建controllers/application.js文件,ember仍然会为您提供一个(并且您在setupController挂钩中设置了它的属性)。您可以在控制器上设置计算值,而不是路径:

setupController(controller, model) {
  this._super(controller, model);

  controller.set('session', Ember.inject.service('session'));
  controller.set('environmentName', ENV.environment);
  controller.set('someComputed', Ember.computed('foo', 'bar', function() {
    let result = '';
    // logic involving foo and bar
    return result;
  })),
},

现在您应该可以访问模板中的{{someComputed}}

此时虽然我建议明确创建一个控制器并将其移动到那里。控制器还没有被杀掉,并且仍然是余烬设计策略的一个重要方面。

编辑:错过了一个结束括号。