2015-03-06 16 views
5

Doğru "Ember Way" in ne yapması gerektiğinden emin değilsiniz.Ember şablonunda erişim sabiti

Her biri farklı bir taskState değeri için üç task-item-list bileşen örneğine sahip olmak istediğim şu şablonu kullanıyorum. Açıkçası, sihirli sayılardan kurtulmak istiyorum. Benim şablonları (anlarım olduğunca yakın) benim config/environment.js dosyasında sabitleri tanımlamak ve vb modelleri, testte, bunları kullanmak, ancak edemez this discussion için

<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> 

teşekkürler.

Sabitleri kullanmanın bir yolu var mı, yoksa bunu yapmanın daha iyi bir yolu var mı? Bileşeni alt sınıfta görebiliyorum ama bunun harika bir çözüm olduğunu düşünmüyorum.

Teşekkürler!

cevap

6

Env bileşenlerinizi enjekte etmeyi denediniz mi? Böyle bir şey:

app/ilklendiriciler/enjekte-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 
}; 

Ve sonra herhangi bir bileşeni olarak size env özelliğini kullanarak config/environment.js içeriğini almak mümkün olacaktır. Örneğin {{env.environment}} mevcut ortamı gösterecektir. Onun yerine tüm bileşenlerin sizin task-item-list bileşeninde enjekte etmek istiyorsanız

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

+0

Fantastik, teşekkür! Bu iyi çalışır, çünkü şablonumu kendi bileşeninin üzerinde yapmak zorunda kaldım, böylece enjeksiyonu “görebilir”. Şimdi benim bölümüm üzerinde daha fazla araştırma ... –

3

Ben, bu yapılandırma dosyasını okuyabilir aynı sorunla karşı karşıya ve bir yardımcı oluşturarak bu çözüldü Bu gibi tanımlanmış

//...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); 

Sabitleri:

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

bunun böyle kullanın:

{{read-env 'CATEGORY.CATEGORY_1'}} 
İlgili konular