如何在创建jsTree jQuery插件后立即重命名节点



我使用jsTree插件创建一个目录树。

右键单击一个节点,应该打开一个contextmenu,用户可以在其中创建一个新的子节点并为其分配一个自定义名称。

因此,除了重命名节点之外,一切都很好。

我做了以下事情:

//create node (inside handler of contextmenu) 
self.dirtree.jstree(true).create_node('#' + $(this).attr('id'));
//open node and edit it (inside event handler)
if (event.type == 'create_node') {
self.dirtree.jstree(true).open_node('#' + data.node.parent);
self.dirtree.jstree(true).edit($('#' + data.node.parent).find('> ul').find('> li').last(), "Neuer Ordner");
}

事件被触发,父节点也被打开,但编辑仅删除节点名称,而不会按预期显示输入字段。如果我只调用open_node,它看起来像:

无编辑的新节点输出

当我也调用edit:时

带有编辑的新节点输出

我不确定出了什么问题。由于编辑会更改节点,因此选择应该很好。

如果我在create_node之后(在contextmenu的处理程序中(调用edit,那么一切都正常。

self.dirtree.jstree(true).create_node('#' + $(this).attr('id'));
self.dirtree.jstree(true).open_node('#' + $(this).attr('id'));
self.dirtree.jstree(true).edit($('#n-' + $(this).attr('id')).find('> ul').find('> li').last(), "Neuer Ordner");

调用上下文菜单输出的处理程序中的所有函数

是否可以在事件处理程序中调用edit?

终于找到了解决方案。问题是,当edit调用发生时,open_node没有完成。所以我定义了一个异步函数,而不是直接调用这两个函数。

createAndRename: async function(parent){
var self = this;
await self.dirtree.jstree(true).open_node('#' + parent);
self.dirtree.jstree(true).edit($('#' + parent).find('> ul').find('> li').last(), "Neuer Ordner");
},

最新更新