Deps.autorun
またはCollection.observe
を使用して、サードパーティのウィジェットをリアクティブなMeteor.Collection
と同期させることの長所と短所は何ですか。
たとえば、jsTreeを使用して、MongoDBに保存したディレクトリツリーを視覚的に表示しています。私はそれを反応的にするためにこのコードを使用しています:
// 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();
}
});
このメソッドを使用することと、次のようなDeps.autorun
呼び出しを使用することの長所/短所は何ですか:(未テスト)
Deps.autorun(function() {
jsonData = FileTree.find().fetch();
$.jstree.reference('#fileTree')({'core': {'data': jsonData} });
});
これはほんの一例です。この特定のユースケースではなく、一般的な長所/短所について質問しています。
Deps.autorun、現在Tracker.autorunはリアクティブ計算ブロックです。一方、observeChangesは、何かが変更されたときのコールバックを提供します。
Deps.autorunを使用すると、function() {...}
のブロック全体が、リアクティブ変数またはドキュメントが変更されるたびに(更新、削除、または挿入される)、またはその他の反応変数の変更。
ObserveChangesコールバックはより微調整されており、クエリに応じて、追加、変更、または削除されたコールバックを起動します。
上記のコードに基づくと、事実上、両方とも同じです。 Deps.autorunブロックにもっと反応性のある変数がある場合は、それを行うobserveChanges
方法の方が効率的です。
一般に、最初のスタイルの方が効率的ですが、コードが上にあるため、どちらもほぼ同じであり、好みによって異なります。