Ember 模板中的访问常量

Access constant in an Ember template

不确定 "Ember Way" 的正确做法是什么。

我有以下模板,其中我想要三个 task-item-list 组件实例,每个实例对应一个不同的 taskState 值。显然,我想摆脱幻数。

<h4>Tasks:</h4>

<div><h5>Backlog:</h5>
  {{ task-item-list tasks=model taskState=101 }}
</div>

<div><h5>Working:</h5>
  {{ task-item-list tasks=model taskState=202 }}
</div>

<div><h5>Done!</h5>
  {{ task-item-list tasks=model taskState=303 }}
</div>

感谢 this discussion 我可以在我的 config/environment.js 文件中定义常量并在模型、测试等中使用它们,但不能(据我所知)在我的模板中使用它们。

有没有办法使用常量,或者有更好的方法吗?我可以看到子类化组件,但我认为这不是一个很好的解决方案。

谢谢!

您是否尝试过在您的组件中注入环境?像这样:

app/initializers/inject-env.js

import env from '../config/environment';

export function initialize(container, application) {
  application.register('env:main', env, { singleton: true, instantiate: false });
  application.inject('component', 'env', 'env:main');
}

export default {
  name: 'inject-env',
  initialize: initialize
};

然后在任何组件中,您都可以使用 env 属性 获取 config/environment.js 的内容。例如 {{env.environment}} 将显示当前环境。

如果你只想在你的 task-item-list 组件中注入而不是所有组件,你可以使用:

application.inject('component:task-item-list', 'env', 'env:main');

我遇到了同样的问题并通过创建一个可以读取配置文件的助手解决了这个问题:

//...app/helpers/read-env.js
import Ember from 'ember';
import ENV from '../config/environment';

export function readEnv(params/*, hash*/) {
  if (params.length === 0) {
    return undefined;
  }

  return Ember.Object.create(ENV).get(params[0]);
}

export default Ember.Helper.helper(readEnv);

常量定义如下:

ENV.CATEGORY = {
  'CATEGORY_1': 0,
  'CATEGORY_2': 1
};

在模板中我是这样使用的:

{{read-env 'CATEGORY.CATEGORY_1'}}