流星`Deps.autorun`对`Collection.observe`

Bon*_*Oak 23 json mongodb reactive-programming jstree meteor

什么是使用的优点/缺点Deps.autorunCollection.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();
  }
});
Run Code Online (Sandbox Code Playgroud)

使用此方法的优点/缺点与Deps.autorun看起来像这样的调用有什么关系:(未经测试)

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

这只是一个例子.我一般都在询问优缺点,而不是这个具体的用例.

Aks*_*hat 27

Deps.autorun,现在Tracker.autorun是一个反应计算块.而observeChanges提供了一些回调,以便更改某些内容.

当您使用Deps.autorun时,function() {...}每次反应变量或文档发生变化时,整个块都将以任何方式(更新,删除或插入)或任何其他反应变量更改重新运行.

observeChanges回调更精细,并根据查询触发添加,更改或删除的回调.

根据您的上述代码,实际上两者都是相同的.如果你在Deps.autorun块中有更多的反应变量,那么observeChanges这样做的方式会更有效.

一般来说,第一种风格更有效,但是当你的代码高于它们时,它们几乎都是相同的,这取决于你的偏好.