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

标签 json mongodb meteor jstree reactive-programming

使用 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/

相关文章:

java - 如何将我得到的 JSON 文件转换为数字,以便我可以在 Android 上操作它们

sql - 如何在 postgresql jsonb 搜索中使用 SIMILAR TO 子句获取不区分大小写的数据?

文档中具有大数组的 mongodb 性能

mongodb - 使用 MongoDB 检查字段是否存在

meteor - 如何向 Meteor.users 集合添加字段

javascript - Meteor 复选框组 - 至少选中一个复选框

javascript - 从谷歌地图 api url 获取空 json

c++ - 从 JSON 字符串中获取数组时出错

node.js - MongoDB、Mongoose 查找所有 _id 等于数组中对象键的位置

mongodb - meteor 使用 Mongo Oplog 吗?