2015-03-06 22 views
5

Không chắc chắn "Cách Ember" thích hợp là làm điều này.Hằng số truy cập trong mẫu Ember

Tôi có mẫu sau, nơi tôi muốn có ba trường hợp thành phần task-item-list, mỗi trường hợp cho một giá trị taskState khác nhau. Rõ ràng, tôi muốn loại bỏ các số ma thuật.

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

Nhờ this discussion tôi có thể xác định các hằng số trong tập tin config/environment.js của tôi và sử dụng chúng trong các mô hình, kiểm tra, vv, nhưng không (như gần như tôi có thể nói) trong các mẫu của tôi.

Có cách nào để sử dụng các hằng số hoặc có cách nào tốt hơn để thực hiện việc này không? Tôi có thể thấy phân lớp thành phần, nhưng tôi không nghĩ đó là một giải pháp tuyệt vời.

Cảm ơn!

Trả lời

6

Bạn đã cố gắng đưa env vào các thành phần của mình chưa? Một cái gì đó như thế này:

app/initializers/tiêm-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 
}; 

Và sau đó trong bất kỳ thành phần bạn sẽ có thể để có được nội dung của config/environment.js sử dụng env tài sản. Ví dụ: {{env.environment}} sẽ hiển thị môi trường hiện tại.

Nếu bạn muốn tiêm chỉ trong thành phần task-item-list của bạn thay vì tất cả các thành phần, bạn có thể sử dụng:

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

+0

Tuyệt vời, cảm ơn! Điều đó hoạt động tốt, với báo trước rằng tôi phải tạo mẫu của mình ở trên thành phần riêng của nó, vì vậy nó có thể "nhìn thấy" việc tiêm. Nghiên cứu thêm về phần của tôi bây giờ ... –

3

tôi phải đối mặt với cùng một vấn đề và giải quyết nó bằng cách tạo ra một helper, mà có thể đọc tập tin cấu hình :

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

hằng được định nghĩa như thế này:

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

Trong mẫu tôi sử dụng nó như sau:

{{read-env 'CATEGORY.CATEGORY_1'}} 
Các vấn đề liên quan