这是我的困境:我同时使用上下文菜单并以编程方式创建新的 jstree 节点。我遇到的问题是,当我以编程方式创建一个新的 jstree 节点时,它也会触发 contextmenu.create
绑定事件。
因此,从本质上讲,由于进行了手动创建调用以及上下文菜单创建绑定,因此会发生重复。我通过在 contextmenu create 事件处理程序中放置一个if语句来部分解释这一点,以防止它在以编程方式触发事件时运行其内容。
但是,仍然会导致重复,因为无论如何都会调用上下文菜单绑定。
create
有没有办法在以编程方式调用时抑制上下文菜单创建事件?
这是代码:
“创建”的上下文菜单事件处理程序:
.bind("create.jstree", function(e, data) {
debugger;
// Ajax call to Server with parent node id and new node text
if($("#RMSDoc_RequirementFlag").val() == "CONTEXT")
{
$.ajax({
"type": "POST",
"url": '@Url.Content("~/RMS/insertRMSNode")',
"data": {
"ParentID" : parseInt(ParentNode),
"Level" : parseInt(ParentLevel),
"ChildNodeText" : data.rslt.obj.text()
},
"success": function(new_data) {
// $.jstree._reference($("#RequirementsTree")).refresh(-1);
var addedNode = data.rslt.obj;
$(addedNode).attr("id", "rbs_" + new_data.RMSHierarchyId);
$(addedNode).attr("name", "rlevel_" + new_data.Level);
$(addedNode).addClass("jstree-closed");
ParentNode = null;
ParentLevel = null;
data = null;
return new_data;
}
});
}
BranchReqFLag = null;
这是以编程方式调用的create
方法:
function ReqSuccess(response) {
// Dynamically add tree branch only (for ipad)
if($("#RMSDoc_RequirementFlag").val() == "ADD_BRANCH_ONLY") {
$("#RMSDoc_TreeBranch_id").val("0");
$("#RMSDoc_TreeBranch_Text").val("");
$("#RequirementsTree").jstree("create", null, "last", {"data" : response.TreeBranch.Text,
"state" : "closed",
"attr" : { "id" : "rbs_" + response.TreeBranch.id, "name" : "rlevel_" + response.TreeBranch.Level }
});
}