2015-07-21 60 views
0

我有一個窗體,通過幾個視圖轉換。目前每個controller.js文件都有這些Ember.computed.alias的長列表。我怎樣才能將它分解成一個文件並將其導入每個控制器?Ember乾燥模式重複使用「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'), 

我想拉了這一切,到一個文件,這樣我可以簡單地進口一些1襯墊在每個controller.js

回答

2

這是一個典型的使用 - 對於Ember.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."作爲別名的前綴,就像您在示例中所做的那樣。