web-dev-qa-db-ja.com

Meteor`Deps.autorun`と `Collection.observe`

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

これはほんの一例です。この特定のユースケースではなく、一般的な長所/短所について質問しています。

23
BonsaiOak

Deps.autorun、現在Tracker.autorunはリアクティブ計算ブロックです。一方、observeChangesは、何かが変更されたときのコールバックを提供します。

Deps.autorunを使用すると、function() {...}のブロック全体が、リアクティブ変数またはドキュメントが変更されるたびに(更新、削除、または挿入される)、またはその他の反応変数の変更。

ObserveChangesコールバックはより微調整されており、クエリに応じて、追加、変更、または削除されたコールバックを起動します。

上記のコードに基づくと、事実上、両方とも同じです。 Deps.autorunブロックにもっと反応性のある変数がある場合は、それを行うobserveChanges方法の方が効率的です。

一般に、最初のスタイルの方が効率的ですが、コードが上にあるため、どちらもほぼ同じであり、好みによって異なります。

27
Akshat