2017-03-01 80 views
0

我正在使用jsTree爲客戶支持服務構建知識庫。爲此,我需要能夠將每個節點的內容發送到我網站上的任何當前活動用戶。jstree - 通過ajax加載contextmenu

這意味着每次我調用一個節點的上下文菜單時,我需要通過ajax獲取當前活動用戶,然後將它們顯示爲菜單項。

現在,我知道contextmenu是節點的一個功能。但如何將它綁定到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很難弄清楚。

回答

1

我不確定您是否可以通過本機jsTree上下文菜單功能來製作它,因爲您進行異步操作。如果沒有更好的解決方案,我只需按如下所示手動建立菜單檢查演示 - Fiddle Demo

... 
'contextmenu': { 
    'items': function(node) { 

     // remove default context menu items 
     var tmp = $.jstree.defaults.contextmenu.items(); 
     delete tmp.rename; 
     delete tmp.remove; 
     delete tmp.ccp; 
     delete tmp.create; 

     tmp = { 
      loading: { 
       label: "Wait ..." 
      } 
     } 

     // start ajax 
     _loadMenuItems(); 

     return tmp; 
    } 
} 



function _loadMenuItems() { 

    // make ajax call 

    // in your success function, where serverData is the data you got: 
    $('.vakata-context').html(''); 

    serverData.forEach(function(item) { 
     var menuItem = $('<li><a href="#">' + item.label + '</a></li>'); 
     menuItem.click(item.action); 
     $('.vakata-context').append(menuItem); 
    }); 

} 
-2

我有完全一樣的問題,你可以找到解決方案here

你只需要做:

contextmenu: { 
    items: function (node, buildContextMenu) { 
     var entries= {}; 

     $.ajax({ 
      url: "...", 
      data: node.id, 
      success: function() { 
       // Construct the entries 
       ... 

       buildContextMenu(entries); // <--- SOLUTION 
      } 
     }); 
    } 
} 
+0

雖然此鏈接可以回答這個問題,最好是在這裏有答案的主要部件,並提供鏈接以供參考。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/16993956) –

+0

好的,這就是爲什麼我的答案被投票。我是新來的,我沒有閱讀文檔。 – vnea