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

使用此方法与看起来像这样的Deps.autorun调用的利弊是什么:(未测试)
Deps.autorun(function() {
  jsonData = FileTree.find().fetch();
  $.jstree.reference('#fileTree')({'core': {'data': jsonData} });
});

这只是一个例子。我问的是总体上的利弊,而不是针对此特定用例。

最佳答案

Deps.autorun,现在为Tracker.autorun是一个反应计算块。观察值更改提供了发生更改时的回调。

当您使用Deps.autorun时,每次响应变量或文档以任何方式(无论是更新,删除还是插入)更改或任何其他响应变量更改时,function() {...}中的整个块都会重新运行。

更好地对obtainChanges回调进行了微调,并根据查询触发要添加,更改或删除的回调。

根据上面的代码,实际上两者是相同的。如果在Deps.autorun块中有更多的反应式变量,则observeChanges的实现方式会更有效。

通常,第一种样式更有效,但是当您的代码位于上方时,它们几乎相同,并且取决于您的偏好。

关于json - meteor `Deps.autorun`和 `Collection.observe`,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25999324/

10-10 19:19