使用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是一个反应计算块。观察值更改提供了发生更改时的回调。
当您使用Deps.autorun时,每次响应变量或文档以任何方式(无论是更新,删除还是插入)更改或任何其他响应变量更改时,function() {...}
中的整个块都会重新运行。
更好地对obtainChanges回调进行了微调,并根据查询触发要添加,更改或删除的回调。
根据上面的代码,实际上两者是相同的。如果在Deps.autorun块中有更多的反应式变量,则observeChanges
的实现方式会更有效。
通常,第一种样式更有效,但是当您的代码位于上方时,它们几乎相同,并且取决于您的偏好。
关于json - meteor `Deps.autorun`和 `Collection.observe`,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25999324/