使用 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} });
});
这只是一个例子。我问的是一般的利弊,而不是针对这个特定的用例。
最佳答案
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/