2012-11-14 6 views
5

Bir belgede değişiklik yapıldığında Meteor yeniden bir görünüm oluşturur.Belirli alanlar değiştiğinde Meteor yeniden gösterilmiyor

Template.story.data = function() { 
    var storyID = Session.get('storyID'); 
    var story = Stories.findOne({ 
    _id: storyID 
    }) 

    if (!story) 
    return; 

    return story; 
}; 

Hikayeler şablonu için bir şablon yardımcısı, Hikayeler belgesinden bir hikaye alma.

story.title gibi alanlar değiştiğinde, şablonun yeniden oluşturmasını istiyorum. Ama story.viewingusers gibi alanlar değiştiğinde, şablonu yeniden oluşturmak istemiyorum. Neyse bunu yapmak için mi?

Sorunu tetikleyen sorun, yayınlama işlevinin bu alanları yayınlamaması ayarlanarak çözülmüştür. Ancak, bu çözüm her bir kullanıcı için çalışmaz ve genel bir çözüm gereklidir.

+0

deneyin şablonu korumak? – crapthings

+0

Yine de doğru veriler doğru mu? Şablonun birden çok kez oluşturulmasını istememenizin bir nedeni var mı (optimizasyonun ötesinde?) –

+0

@TomColeman Veriler doğru, ancak bir popover olarak görünen bir arayüz elemanım var. Öğe yeniden işlendiğinde, popover yok edilir. Bu gerçekten sinir bozucu. – Harry

cevap

3

Aradığınız şey #constant şablon yardımcısıdır.

Durumunda yaptığım şey, popover işaretlemesini sabit bir blokta sarmak, daha sonra bu bloktaki içeriği story.rendered işlevinde el ile güncelleştirmek.

Yani böyle bir şey:

story.html:

<template name="story"> 
    ... 
    {{#constant}} 
     <!-- Popover markup here --> 
    {{/constant}} 
    ... 
</template> 

client.js:

Template.story.rendered = function(){ 
    //Update logic here 
} 
+0

Bu bir seçenektir, ancak meteor stili mantığını mahveder ve çok fazla karmaşıklık ekler, bu yüzden konuyu daha doğrudan ele alan bir şey umuyorum. – Harry

+0

Hmm meteor stili mantığından emin değilim, fakat meteordaki 'partiler' örneğinden bu tekniği öğrendim. Bu örnekte bir göz atmalısınız, mantık etrafında bir otomatik çalıştırmayı tamamlar, böylece güncelleme mantığı da 'meteor stilinde' geçersiz hale gelir. –

+0

Bu, 'Meteor.render'ı kullanmanıza veya HTML'nizi dom manipülasyonu ile oluşturmaya zorlar. İkisi de harika değil. Parti örneğini kontrol ettim ve yaptıkları şey bu. Bu çalışıyor. ama daha yavaş render yapar, şablon yerine javascript içine şablon kodu koyar ve şablonlarınızı daha fazla parçalara ayırmaya zorlar. Her 3 şey de karmaşıklığı artırır ve korumak için işleri zorlaştırır. Ama demek istediğim, bu çok iyi ve faydalı bir cevap, teşekkürler. – Harry