2014-09-23 8 views
22

Jakie są zalety/wady między używaniem Deps.autorun lub Collection.observe do synchronizowania widżetu innej firmy z reaktywnym Meteor.Collection.Meteody `Deps.autorun` kontra` Collection.observe`

Na przykład, używam jsTree wizualnie pokazują drzewo katalogów że mam zapisany w moim MongoDB. Używam tego kodu, aby to reaktywny:

// 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(); 
    } 
}); 

Jakie są plusy/minusy stosowania tej metody w Deps.autorun vs rozmowy, które wyglądają mniej więcej tak: (niesprawdzone)

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

ten to tylko przykład. Pytam o plusy/minusy w ogóle, nie w tym konkretnym przypadku użycia.

Odpowiedz

25

Deps.autorun, teraz Tracker.autorun jest blokiem obliczeń reaktywnych. Natomiast behaviorChanges zapewnia wywołanie zwrotne, gdy coś się zmienia.

Podczas korzystania z Deps.autorun, cały blok w function() {...}, będzie ponownie uruchamiany za każdym razem, gdy zmienna reaktywna lub dokument zmieni się w jakikolwiek sposób (to jest zaktualizowany, usunięty lub wstawiony) lub dowolny inny reaktywny zmienna zmiana.

Połączenia zwrotne "obserwuj zmiany" są lepiej dostrojone i wywołują wywołania zwrotne, które można dodawać, zmieniać lub usuwać w zależności od zapytania.

Na podstawie powyższego kodu, w efekcie obie są takie same. Gdybyś miał więcej zmiennych reaktywnych w bloku Deps.autorun, to sposób wykonania tego byłby bardziej wydajny.

Ogólnie pierwszy styl jest bardziej wydajny, ale jak kod stoi ponad oboje prawie taka sama, a to zależy od preferencji.

+1

Innymi słowy, 'Tracker.autorun' działa z czymkolwiek, co może zarejestrować zależność, ale' zaobserwujChanges' są bardziej specyficznymi hakami, które działają tylko z kursorami mongo. – BonsaiOak

+0

@BonsaiOak Tak, Tracker.autorun to magiczne powtórzenia, które będą ponownie uruchamiać całą metodę na każdej zmianie zależności zarejestrowanej w jego metodzie i obserwowaćChanges są bardzo specyficznymi hookami zdarzeń javascriptey do zmian w bazie danych dla konkretnych zapytań – Akshat