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