JsTree contextmenu错误

时间:2013-09-13 22:40:40

标签: javascript contextmenu jstree

一个javascript错误,指示在选择重命名节点时未定义this.rename(obj)。

JavaScript运行时错误:对象不支持属性或方法'重命名'

$(document).ready(function () {
        $('#marketing-category-tree').jstree({
            themes: {
                theme: "default",
                dots: true,
                icons: true
            },
            contextmenu: {
                items: {
                    "rename" : {
                        "label": "Rename",
                        "action": function (obj) { this.rename(obj); }
                    }
                }
            },
            plugins: ["themes", "html_data", "ui", "crrm", "contextmenu"]
        })
        .bind("rename.jstree", function (e, data) {
            debugger;
            alert("RENAMING!!!");
        });
});

我还尝试了以下代码,并且能够选择并重命名,但无法捕获更改事件。

$('#marketing-category-tree').jstree({
    themes: {
        theme: "default",
        dots: true,
        icons: true
    },
    plugins: ["themes", "html_data", "ui", "crrm", "contextmenu"]
})
.bind("rename.jstree", function (e, data) {
    alert("RENAMING!!!");
});

3 个答案:

答案 0 :(得分:3)

我认为您正在寻找的方法是edit。但首先你必须得到树的节点。尝试使用以下代码:

...
"contextmenu" : {
  "items" : renameItem : { // The "rename" menu item
              label : "Rename",
              action : function (obj) {
              n = $('#marketing-category-tree').jstree(true).get_node(obj.reference); //get node
              $('#marketing-category-tree').jstree(true).edit(n); //puts the node into edit mode
              }
            }
  }
...

HTH

答案 1 :(得分:0)

你的第一个代码示例因为

而无法运行
"action": function (obj) { this.rename(obj); }

在这种情况下" 这个"是一个指向Window对象的东西,接下来就是文档http://www.jstree.com/api/没有提到方法重命名而只有 rename_node

以下是工作示例(右键单击任何节点,然后单击重命名)

http://jsfiddle.net/w9snc6z1/4/

注意 rename_node 也无效,但根据documentation

  

set_text:设置节点的文本值。在内部使用,请使用rename_node(obj,val)。

不建议使用set_text而不是rename_node。

答案 2 :(得分:0)

您应该使用var tree = $("#marketing-category-tree").jstree(true);获取树的节点,然后对节点进行操作。

u可以使用此example 祝好运 :)