我有一个jsTree,我正试图双向 "连接 "到Meteor集合。现在我自动触发一个 jsTree.refresh()
每当集合更新的帮助下 .observeChanges
:
FileTree.find().observeChanges({
added: function() {
$.jstree.reference('#fileTree').refresh();
},
changed: function() {
$.jstree.reference('#fileTree').refresh();
},
removed: function() {
$.jstree.reference('#fileTree').refresh();
}
});
我想允许在jsTree中通过拖动东西来编辑数据库。 下面是它的样子。
如果我的理解正确的话,我的问题是,数据库更新会触发 observeChanges
事件,我之前设置的。 这将导致树的又一次刷新。 这将导致恼人的闪烁,从而打断用户。 (即在每次拖拽操作后,文件浏览器将在大约 0.75 秒内无法使用。)
我如何防止这种不必要的更新,或者有没有更好的方法来结构我的jsTree界面,以防止这个问题。
你看过这个吗?
看来他是在用 autorun
与。observeChanges
但主要是和你的概念一样。
Template.showtree.rendered = function(){
var self = this;
var nodes = [];
Nodes1 = $('#tree1').tree();
Nodes2 = $('#tree2').tree();
if (!self.handle){
self.handle = Meteor.autorun(function(){
// refresh trees on new data
nodes = Nodes.find();
Nodes1.tree('option', 'data', 'Projects');
Nodes2.tree('option', 'data', 'Contexts');
}); //self.handle
} // if (!self.handle)
}
如果这个东西只有一个用户会被编辑(一次),那么也许你只需要 不刷新 而把树作为作者的接口。
如果它需要根据数据库更新(来自其他用户,或者只是为了保持同步)来刷新,你可以考虑改变你的工作流逻辑。
changed.jstree
事件,在本地更新数据库,阻止autorun
触发jstree中的刷新理论上来说,应该只需要1次刷新,而不是2次或3次。
或者如果你真的想限制重抽... 你可以找到 旧父节点 和 新的父节点 只有我们 refresh_node(obj)
来刷新这些变化节点。
刷新树中的一个节点(重载它的子节点),该节点内所有打开的节点都会通过调用load_node来重载。