2012-12-22 15 views
5

Bazen kendimi aynı verileri birden çok şablona bildiriyor buluyorum. Örneğin:Verileri birden fazla şablonda paylaşabilir misiniz?

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

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

Ama tamamen bildirimleri kurtulmak için herhangi bir yolu vardır:

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

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

Ben küresel kullanarak daha iyi yapabilir? Başka bir deyişle, bazı global verileri varsayılan olarak birden çok şablona paylaşmanın bir yolu var mı?

cevap

5

'u aradığınız anda güncellenecektir. İyi bir çözüm (bir Yardımcının yardımıyla!).

küresel Sizin:

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

yardımcı: Artık

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

tüm şablonları bunu yararlanabilirler:

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

Bunun için Session kullanabilirsiniz:

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

Oturumu kullanmanın güzel bir bonus, işte bu yeniden-işlenecek buna bağlıdır tüm şablonları neden olur ayarlayarak bir reaktif veri kaynağı olduğundan. Dolayısıyla, açık artırma süreleriniz Session.set("auctionDurations", [ 30, 60, 120 ]);

+0

Sry, ama yanlış anladınız. Bu atama bildirimlerinden tamamen kurtulmak istedim. – Dave

2

bir yardımcı fonksiyonunun kullanımı oldukça olduğunu iyi genel amaçlı çözüm. Tamlık için, basit bir atamayı da yapabilirsiniz:

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

Ah evet, bu da iyi bir kısayol olabilir. Bu, yükleme sırasına bağlı olarak çalışabilir veya çalışmayabilir. Ancak mevcut kodların bir kısmına bakıldığında, bu durumda yükleme sırasının önemli olmadığı ileri sürülüyor. Burada bir şey mi eksik? – Dave

+0

Yükleme emri iki nedenden ötürü geçerli olmayacaktır: 1) açıkça, oluşturma sırasına bakılmaksızın değerleri almanız, 2) özellikle bu durumda, değerler statiktir (dinamik koleksiyonlarla da benim için çalışmış olsa da). –