2012-12-22 9 views
5

Đôi khi tôi thấy mình khai báo cùng một dữ liệu với nhiều mẫu. Ví dụ:Bạn có thể chia sẻ dữ liệu trên nhiều mẫu không?

Template.auction_page.auctionDurations = function() { 
    return [ 30, 60, 120 ]; 
}; 

Template.auction_editor.auctionDurations = function() { 
    return [ 30, 60, 120 ]; 
}; 

tôi có thể làm cho nó tốt hơn bằng cách sử dụng một toàn cầu:

Template.auction_page.auctionDurations = function() { 
    return global.auctionDurations; 
}; 

Template.auction_editor.auctionDurations = function() { 
    return global.auctionDurations; 
}; 

Nhưng có cách nào để thoát khỏi tờ khai hoàn toàn? Nói cách khác, có cách nào để chia sẻ một số dữ liệu toàn cục cho nhiều mẫu theo mặc định không?

Trả lời

5

Tìm thấy giải pháp tốt (với sự trợ giúp của Người trợ giúp!).

bạn toàn cầu:

global = _.extend({}, { 
    regions: [ "Americas", "Europe", "Asia" ] 
} 

Các helper:

Handlebars.registerHelper("global", function(name) { 
    return global[name]; 
}); 

Bây giờ tất cả các mẫu của bạn có thể tận dụng nó:

<select> 
    {{#each global "regions"}} 
    <option>{{this}}</option> 
    {{/each}} 
</select> 
1

Bạn có thể sử dụng Session cho việc này:

Template.auction_page.auctionDurations = function() { 
    return Session.get("auctionDurations"); 
    } 
    Template.auction_editor.auctionDurations = function() { 
    return Session.get("auctionDurations"); 
    } 

Một tiền thưởng tốt đẹp của việc sử dụng phiên là, vì nó là một nguồn dữ liệu phản ứng, thiết lập nó sẽ gây ra tất cả các mẫu phụ thuộc vào nó được tái tạo hình. Vì vậy, thời lượng đấu giá của bạn sẽ cập nhật ngay sau khi bạn gọi Session.set("auctionDurations", [ 30, 60, 120 ]);

+0

Sry, nhưng bạn đã hiểu lầm. Tôi muốn loại bỏ tất cả các tuyên bố phân công này. – Dave

2

Việc sử dụng một hàm helper là khá giải pháp mục đích chung tốt. Để hoàn thành, bạn cũng có thể thực hiện một nhiệm vụ đơn giản:

Template.auction_page.auctionDurations = Template.auction_editor.auctionDurations; 
+0

Ah vâng, đây cũng có thể là một phím tắt tốt. Tôi nghĩ rằng điều này có thể hoặc có thể không hoạt động tùy thuộc vào thứ tự tải. Nhưng xem xét một số mã hiện có của tôi cho thấy rằng thứ tự tải không quan trọng trong trường hợp này. Am i thiếu cái gì ở đây? – Dave

+0

Thứ tự tải sẽ không bị hỏng vì hai lý do: 1) bạn rõ ràng nhận được các giá trị bất kể thứ tự hiển thị, 2) trong trường hợp này cụ thể, các giá trị là tĩnh (mặc dù nó đã hoạt động cho tôi với bộ sưu tập động). –