2014-09-23 12 views
22

Bir üçüncü taraf widget'ını reaktif Meteor.Collection ile eşitlemek için Deps.autorun veya Collection.observe arasındakiler arasındaki artı/eksiler nelerdir? Örneğin, MongoDB'mde sakladığım bir dizin ağacını görsel olarak göstermek için jsTree kullanıyorum. Bu kodu kullanıyorum o reaktif hale getirmek için:Meteor `Deps.autorun` vs` Collection.observe`

// automatically reload the fileTree if the data changes 
FileTree.find().observeChanges({ 
    added: function() { 
    $.jstree.reference('#fileTree').refresh(); 
    }, 
    changed: function() { 
    $.jstree.reference('#fileTree').refresh(); 
    }, 
    removed: function() { 
    $.jstree.reference('#fileTree').refresh(); 
    } 
}); 

böyle bir şey olmazdı bir Deps.autorun çağrısı vs bu yöntemi kullanmanın artı/eksi nelerdir: (denenmemiş)

Deps.autorun(function() { 
    jsonData = FileTree.find().fetch(); 
    $.jstree.reference('#fileTree')({'core': {'data': jsonData} }); 
}); 

Bu sadece bir örnektir. Bu özel kullanım durumu için değil, genel olarak artıları/eksileri soruyorum.

cevap

25

Deps.autorun, şimdi Tracker.autorun bir reaktif hesaplama bloğu. Oysa gözlemler bir şey değiştiğinde geri arama sağlar.

Deps.autorun kullandığınızda, function() {...}'daki tüm blok, bir reaktif değişken veya belge değiştiğinde, (herhangi bir şekilde güncellenir, kaldırılır veya eklenir) veya başka herhangi bir reaktifde her yeniden çalışır değişken değişim.

ObserveChanges geri aramaları daha iyi ayarlanmış ve sorguya bağlı olarak eklenen, değiştirilen veya kaldırılan geri aramaları tetikler.

Yukarıdaki kodunuza dayanarak, her ikisi de aynıdır. Deps.autorun bloğunda daha reaktif değişkenler olsaydı, observeChanges yapmanın yolu daha verimli olurdu.

Genel olarak, ilk stil daha verimlidir, ancak kodunuzun üzerinde durduğu için ikisi de hemen hemen aynıdır ve tercihinize bağlıdır.

+1

Diğer bir deyişle, "Tracker.autorun" bir bağımlılığı kaydedebilecek herhangi bir şeyle çalışır, ancak "Gözlem Değiştirme" yalnızca mongo imleçleriyle çalışan daha özel kancalardır. – BonsaiOak

+0

@BonsaiOak Evet, Tracker.autorun, metodu ve gözlemlerinde kayıtlı her bağımlılık değişikliğinde tüm yöntemi yeniden çalıştıracak sihirli temsilcidir. Değişiklikler, belirli sorgulara yapılan veritabanı değişikliklerine çok özel javascriptey olay kancalarıdır – Akshat