Javascript jstree-通过ajax加载上下文菜单

Javascript jstree-通过ajax加载上下文菜单,javascript,jstree,Javascript,Jstree,我正在使用jsTree为客户支持服务构建知识库。为此,我需要能够将每个节点的内容发送到我网站上当前活动的任何用户 这意味着每次调用节点的上下文菜单时,我都需要它通过ajax获取当前活动的用户,然后将其显示为菜单项 现在,我知道contextmenu是node的函数。但是如何将它绑定到ajax函数的结果呢 大致如下: "contextmenu": { "select_node": false, "show_at_node": false, "items": function

我正在使用jsTree为客户支持服务构建知识库。为此,我需要能够将每个节点的内容发送到我网站上当前活动的任何用户

这意味着每次调用节点的上下文菜单时,我都需要它通过ajax获取当前活动的用户,然后将其显示为菜单项

现在,我知道contextmenu是node的函数。但是如何将它绑定到ajax函数的结果呢

大致如下:

"contextmenu": {
    "select_node": false,
    "show_at_node": false,
    "items": function(node) {
        $.ajax({
            url: 'some_url_with_actions_for_node',
            success: function (action_list) {
                return action_list;
            }
        })
    }
}
显然上面的例子不起作用,但你明白了

医生说菜单是可以修改的

接受节点和回调函数并调用 具有可用于该节点的操作对象的回调函数 (您也可以退回项目)


也许有办法挤出我需要的回拨电话?我对JS的理解太差了。

我不确定是否可以通过原生jsTree上下文菜单功能实现,因为您执行了异步操作。如果没有更好的解决方案,我只需手动构建菜单,如下所示。检查演示-

。。。
“上下文菜单”:{
“项”:函数(节点){
//删除默认上下文菜单项
var tmp=$.jstree.defaults.contextmenu.items();
删除tmp.rename;
删除tmp.remove;
删除tmp.ccp;
删除tmp.create;
tmp={
装载:{
标签:“等等……”
}
}
//启动ajax
_loadMenuItems();
返回tmp;
}
}
函数_loadMenuItems(){
//打ajax电话
//在成功函数中,其中serverData是您获得的数据:
$('.vakata context').html('');
serverData.forEach(函数(项){
var menuItem=$('
  • '); 菜单项。单击(项。操作); $('.vakata context').append(menuItem); }); }
    我不确定是否可以通过原生jsTree上下文菜单功能实现,因为您执行了异步操作。如果没有更好的解决方案,我只需手动构建菜单,如下所示。检查演示-

    。。。
    “上下文菜单”:{
    “项”:函数(节点){
    //删除默认上下文菜单项
    var tmp=$.jstree.defaults.contextmenu.items();
    删除tmp.rename;
    删除tmp.remove;
    删除tmp.ccp;
    删除tmp.create;
    tmp={
    装载:{
    标签:“等等……”
    }
    }
    //启动ajax
    _loadMenuItems();
    返回tmp;
    }
    }
    函数_loadMenuItems(){
    //打ajax电话
    //在成功函数中,其中serverData是您获得的数据:
    $('.vakata context').html('');
    serverData.forEach(函数(项){
    var menuItem=$('
  • '); 菜单项。单击(项。操作); $('.vakata context').append(menuItem); }); }
    我遇到了完全相同的问题,您可以找到解决方案

    你只需要做:

    contextmenu: {
        items: function (node, buildContextMenu) {
            var entries= {};
    
            $.ajax({
                url: "...",
                data: node.id,
                success: function () {
                    // Construct the entries
                    ...
    
                    buildContextMenu(entries); // <--- SOLUTION
                 }
            });
        }
    }
    
    上下文菜单:{
    项目:功能(节点、buildContextMenu){
    var条目={};
    $.ajax({
    网址:“…”,
    数据:node.id,
    成功:函数(){
    //构建条目
    ...
    
    buildContextMenu(entries);//我遇到了完全相同的问题,您可以找到解决方案

    你只需要做:

    contextmenu: {
        items: function (node, buildContextMenu) {
            var entries= {};
    
            $.ajax({
                url: "...",
                data: node.id,
                success: function () {
                    // Construct the entries
                    ...
    
                    buildContextMenu(entries); // <--- SOLUTION
                 }
            });
        }
    }
    
    上下文菜单:{
    项目:功能(节点、buildContextMenu){
    var条目={};
    $.ajax({
    网址:“…”,
    数据:node.id,
    成功:函数(){
    //构建条目
    ...
    
    buildContextMenu(条目);//虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能会无效。-好的,这就是我的答案被否决的原因。我是SO的新手,我还没有阅读文档。@vnea,非常感谢。这为我节省了很多时间当然!虽然这个链接可以回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,只有链接的答案可能会无效。-好的,这就是我的答案被否决的原因。我是SO的新手,我还没有阅读文档。@vnea,非常感谢。这为我节省了时间时间不多了!