我正在使用jsTree为客户支持服务构建知识库。为此,我需要能够将每个节点的内容发送到我网站上任何当前活动的用户。
这意味着每次调用节点的上下文菜单时,我都需要它通过ajax获取当前活动的用户,然后将它们显示为菜单项。
现在,我知道contextmenu是节点的一个功能。但是如何将它绑定到ajax函数的结果?
有些事情:
<?php
class A {
public function foo() {
echo "x";
}
}
trait T {
public function foo() {
echo "y";
}
}
class B extends A {
use T;
public function foo() {
echo "z";
}
}
$test = new B();
$test->foo();
// result z
显然上面的例子不起作用,但你明白了。
文档说菜单可以
接受节点和回调函数并调用的函数 具有该节点可用操作对象的回调函数 (你也可以退货)
所以也许有办法挤进我需要的回调?我很难在JS上解决这个问题。
答案 0 :(得分: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);
});
}
答案 1 :(得分:-2)
我遇到了完全相同的问题,您可以找到解决方案here。
你必须这样做:
contextmenu: {
items: function (node, buildContextMenu) {
var entries= {};
$.ajax({
url: "...",
data: node.id,
success: function () {
// Construct the entries
...
buildContextMenu(entries); // <--- SOLUTION
}
});
}
}