json - meteor `Deps.autorun` 与 `Collection.observ

使用 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 是一个响应式(Reactive)计算 block 。而当发生变化时,observeChanges 会提供回调。

当你使用 Deps.autorun 时,function() {...} 中的整个 block ,将在每次 react 变量或文档发生任何变化时重新运行(更新、删除或插入),或任何其他 react 性变量更改。

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

根据您上面的代码,实际上两者是相同的。如果在 Deps.autorun block 中有更多的 react 变量,那么 observeChanges 的执行方式会更有效。

一般来说,第一种风格更高效,但是当您的代码位于上面时,它们几乎相同,这取决于您的偏好。

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

相关文章:

mysql - 如何在 MySQL 中编写可以解析列中 JSON 数据的查询?

json - getJSON 与 optJSON

javascript - 日历结束日期错了一天

.net - JSON.NET 教程

json - 遍历 JSON 文件 PowerShell

android - 如何使用 Android Lollipop 中的注释在 Android Jack

bash - jq 直接替换文件上的文本(如 sed -i)

json - d3 - 读取 JSON 数据而不是 CSV 文件

javascript - 如何使用 Angular-Translate 显示翻译?

c# - 类型是接口(interface)或抽象类,不能实例化