我使用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");
},