2016-04-13 22 views
4

Kullanışlı olmayan hesaplamaları önlemek için bir yol ihtiyacım var;Meteor.js: Nasıl kullanılmaz yenileme/hesaplama/nokta gösterimi ile yeniden render

Template.registerHelper('name', function() { 
    console.log("running"); 
    return Meteor.user().profile.name; 
}); 

(

<body><p>My name: {{name}}</p></body> 

html olarak): Reaktif işlevlerinde , ben sadece bir özelliği gerekir, reaktif bir nesne var, ancak bu nesne değişimin diğeri ise, tüm işlev yeniden hesaplanır

Şimdi yaşınızı değiştirelim:

Meteor.users.update({_id:Meteor.userId()},{$set:{"profile.age":20}}); 

sen ne gördüğünü tahmin (Ikinci kez ...) sizin konsolda

running    x2 

ancak yalnızca bir kez adı

önemli olduğunu Neden

değişmemiştir çünkü çalışmalıdır? Uygulamamda karmaşık kalsiyellerim var ve çevrimiçi ortamda kullanıcı/boş durumun durumu kolayca değişiyor

cevap

1

Kullanılan reaktif fonksiyonun değeri değiştiğinde hesaplama yeniden çalıştırılır. Durumunuzda, reaktif işlevi Meteor.user() şeklindedir, bu nedenle, bu yöntemin sonucu her değiştiğinde, yeniden başlatılır.

Gerçekten gerekli olan yerlerde rerun'ları sınırlamak için, izlemek istediğiniz değeri tam olarak döndürecek bir reaktif işlev kullanmanız (veya oluşturmanız) gerekir. Örneğin,

var prop = new ReactiveVar(); 

Template.template.onRendered(function() { 
    this.autorun(function() { 
    prop.set(Meteor.user().profile.name); 
    }); 
}); 

Template.template.helpers({ 
    hlpr: function() { 
    console.log("RERUN!!!"); 
    return prop.get(); 
    }, 
}); 
+0

Her zaman bunu yapmak iyi bir fikir mi? Çünkü bunu kolayca yapabilmem için bir fon oluşturdum ve bunu bir paket içinde yayınlayacağım –

+0

Kendi kendine cevap ver, çok teşekkürler! Ayrıca, kendimi, şablondaki reaktif nesne dizisini kullanmanın gerçekten kötü bir fikir olduğunu öğrendim. –