我在我的Jstree实例中使用复制和粘贴,但默认粘贴会清除复制的节点,而我想将它们保留在缓冲区中。 如果我修改te源代码没问题,但我不想这样做。
paste : function (obj, pos) {
obj = this.get_node(obj);
if(!obj || !ccp_mode || !ccp_mode.match(/^(copy_node|move_node)$/) || !ccp_node) { return false; }
if(this[ccp_mode](ccp_node, obj, pos, false, false, false, ccp_inst)) {
/**
* triggered when paste is invoked
* @event
* @name paste.jstree
* @param {String} parent the ID of the receiving node
* @param {Array} node the nodes in the buffer
* @param {String} mode the performed operation - "copy_node" or "move_node"
*/
this.trigger('paste', { "parent" : obj.id, "node" : ccp_node, "mode" : ccp_mode });
}
// what I changed by commenting out, need the buffer later
// ccp_node = false;
// ccp_mode = false;
// ccp_inst = false;
},
如何在不修改源代码的情况下覆盖此功能?
Here是一个证明我尝试过的东西。
答案 0 :(得分:0)
自己找到它。更新了小提琴。 如果有人有更好的解决方案,我暂时不会回答这个问题。
这是代码
$.jstree.core.prototype.paste = function (obj, pos) {
// need buffer otherwise ccp vars not known
var buffer = this.get_buffer();
ccp_mode = buffer.mode;
ccp_node = buffer.node;
ccp_inst = $('#jstree').jstree(true)
obj = this.get_node(obj);
if(!obj || !ccp_mode || !ccp_mode.match(/^(copy_node|move_node)$/) || !ccp_node) { return false; }
if(this[ccp_mode](ccp_node, obj, pos, false, false, false, ccp_inst)) {
this.trigger('paste', { "parent" : obj.id, "node" : ccp_node, "mode" : ccp_mode });
}
}