我有一个转换为多个视图的表单。目前,每个controller.js文件都包含这些Ember.computed.alias
的长列表。如何将其分解为一个文件并将其导入每个控制器?
目前在每个controller.js
中entityEmail: Ember.computed.alias('controllers.checkout.entityEmail'),
entityDOB: Ember.computed.alias('controllers.checkout.entityDOB'),
entityPhone: Ember.computed.alias('controllers.checkout.entityPhone'),
entityAddress1: Ember.computed.alias('controllers.checkout.entityAddress1'),
entityAddress2: Ember.computed.alias('controllers.checkout.entityAddress2'),
entityCity: Ember.computed.alias('controllers.checkout.entityCity'),
我想把所有内容都放到一个文件中,这样我就可以在每个controller.js中导入一些内容。
答案 0 :(得分:2)
这是Ember.Mixin的经典用例 你可以将所有这些计算出的道具提取到一个mixin中,并用它扩展每个控制器(需要有这些道具)。
将以下mixin添加到您的应用
// app/mixins/entity-form.js
import Ember from 'ember';
const { Mixin, inject, computed: { alias } } = Ember;
export default Mixin.create({
checkout: inject.controller(),
entityEmail: alias('checkout.entityEmail'),
entityDOB: alias('checkout.entityDOB'),
entityPhone: alias('checkout.entityPhone'),
entityAddress1: alias('checkout.entityAddress1'),
entityAddress2: alias('checkout.entityAddress2'),
entityCity: alias('checkout.entityCity')
});
然后在控制器中使用它
// app/controllers/example.js
import EntityFormMixin from 'yourAppName/mixins/entity-form';
const { Controller } = Ember;
export default Controller.extend(EntityFormMixin, {
// rest of controller's props and functions
});
注意:Ember.inject API自Ember 1.10.0起可用。如果您使用的是旧版本,则需要将注入行替换为:needs: ['checkout']
,并在别名前添加"controllers."
前缀,就像您在示例中所做的那样。