与Jstree搜索有关刷新事件的回调



在这里看很多帖子,但没有找到我想要的。

Jstree版本是3.3.3。

我想在发送ajax请求的create_node事件之后选择一个节点。

然后jstree射击rename_node事件。在此事件中,我提出了另一个AJAX请求,以重命名类别或数据库中的文章。

在这里我需要刷新树,以便为了新节点获得正确的ID等...

这是一个Ajax调用,用服务器端JSON重建节点,JavaScript继续执行代码...(

因此,我发现选择新节点的唯一解决方案是制作一个settimeout,以确保重建树,然后我解析我的URL以选择这样的节点:

//  Select Article or Category newly created
if ( window.location.pathname.split("/")[3] == "edit" ) {
    id = window.location.pathname.split("/")[2]
    controller = window.location.pathname.split("/")[1] == "articles" ? "article_" : "category_"
    setTimeout(function(){
        $('#tree').jstree("deselect_all")
        $('#tree').jstree("select_node", controller+id)
    },1500);
}

我不喜欢这样,如果Ajax请求重建节点失败或太长,这将导致问题。

我没有在刷新事件上找到回调。

以一种完全不同的方式进行操作,在创建中选择节点,然后在文章/:id/edit或category/catpory/:id/edit 上重定向

    // Create category && articles
    .on('create_node.jstree', function (e, data) {
        data_JSON = {}
        if ( data.node.type === "category" ) {
            controller = "categories"
            data_JSON = { parent_id :  data.parent.match(/d+/)[0] } // DRY
        } else {
            controller = "articles"
            data_JSON = { category_id :  data.parent.match(/d+/)[0] } // DRY
        }
        $.ajax({
            url : "/" + controller + "/new",
            method : "GET",
            dataType : "json",
            data : data_JSON
        })
        .done(function (d) {
            data.instance.deselect_all()
            data.node.id_number = d[data.node.type + "_id"]
            data.instance.set_id(data.node.id, data.node.type+"_"+data.node.id_number)
            data.instance.select_node(data.node.id)
            data.node.userCreatedNode = true
        });
    })
    // Rename category && articles
    .on('rename_node.jstree', function (e, data) {
        controller = data.node.type === "category" ? "categories" : "articles"
        data_JSON = {}
        data_JSON[data.node.type] = { id : data.node.id, title : data.text }
        data.node.id_number===undefined && ( data.node.id_number = data.node.id.match(/d+/) )
        $.ajax({
            url : "/" + controller + "/" + data.node.id_number,
            method : "PATCH",
            dataType : "json",
            data : data_JSON
        })
        .done( function (d) {
            if ( data.node.userCreatedNode == true ) {
                edit_path = window.location.origin+"/"+controller+"/"+data.node.id_number+"/edit"
                window.location.href = edit_path
            }
        });
    })

最新更新