代码之家  ›  专栏  ›  技术社区  ›  peter

Jstree:用于粘贴的重写函数

  •  0
  • peter  · 技术社区  · 8 年前

    我在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 是一个JSFIDLE来演示我的尝试。

    1 回复  |  直到 8 年前
        1
  •  0
  •   peter    8 年前

    我自己找到的。更新了小提琴。 我暂时不回答这个问题,以防有人有更好的解决方案。

    这是代码

        $.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 });
            }
          }
    
    推荐文章