Jstree:覆盖粘贴函数

时间:2018-02-21 11:50:32

标签: javascript jstree

我在我的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是一个证明我尝试过的东西。

1 个答案:

答案 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 });
        }
      }