首页 > 解决方案 > 如何在使用 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,它看起来像:

未经编辑的新节点输出

当我也调用编辑时:

带有编辑的新节点输出

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

如果我在 create_node 之后调用编辑(在上下文菜单的处理程序中),一切正常。

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");

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

甚至可以在事件处理程序中调用编辑吗?

标签: jqueryjstree

解决方案


最后我找到了解决方案。问题是,当编辑调用发生时,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");
},

推荐阅读