我在我的项目中使用JSTree插件和sort plugin.But因为sort插件我的移动节点没有工作。我发生这种情况因为在调用实际的move_node之前我的sort函数被触发。所以节点数据越来越多在调用的实际移动事件之前排序,并且由于此节点被安排在之前的状态中。
我的代码是这样的。
$("#jstree").jstree({
"core": {
"check_callback": function (op, node, par, pos, more) {
if (op =='move_node')
{
if (this.get_node(node).parent === this.get_node(par).id) {
isSortable = false;
return true;
} else { return false; }
//return par.id == node.parent;
}
return true;
},
"data": {
'url': function (node) {
if (node.id === '#') {
return '/Template/GetMappingTree?touchpointId=' + touchpointId + '&orgAppSyncId=' + orgAppSyncId + '&orgId=' + orgId;
}
else {
if (node.data.Type == "attribute")
{
if (node.data.ChildUrl != '' && node.data.ChildUrl != null) {
return node.data.ChildUrl;
}
else {
return;
}
}
if (node.data.Type == "condition") {
if (node.data.ChildUrl != '' && node.data.ChildUrl != null) {
return node.data.ChildUrl;
}
else {
return;
}
}
if (node.data.Type == "variable") {
//var url = '/Template/VariableTree?touchpointId=' + touchpointId;
//return url;
if (node.data.ChildUrl != '' && node.data.ChildUrl != null) {
return node.data.ChildUrl;
}
else {
return;
}
}
if (node.data.Type === 'Tracking') {
if (node.data.ChildUrl != '' && node.data.ChildUrl != null) {
return node.data.ChildUrl;
}
else {
return;
}
}
}
},
'dataType': 'json'
}
},
"multiple": false,
"plugins": ['json_data', "table", "dnd", "actions", "wholerow", 'search', 'sort','crrm'],
table: {
columns: [
{ header: "@(ViewBag.DestinationSchema + " Fields")", width: "30%" },
{ value: "MappingData", header: "@("Mapping expression (for " + ViewBag.SourceSchema + ")")", width: "55%" },
{ format: loadActions, value: "actions", header: "Action", width: "15%" }
],
resizable: false,
draggable: false,
contextmenu: false,
headerContextMenu:false
},
sort: function (a, b) {
debugger;
a1 = this.get_node(a);
b1 = this.get_node(b);
if (a1.data!=null&& b1.data!=null)
{
return (a1.data.order > b1.data.order) ? 1 : -1;
}
},
dnd: {
is_draggable: function (node) {
var nd = node;
if (node[0].data.IsMoveable == false) {
return false;
}
if (node[0].data.Type == "variable" || node[0].data.Type == "attribute")
{
return true;
}
if (node[0].parent == "trackingattribute") {
return true;
}
return false;
},
drop_finish: function (node) {
debugger;
}
}
})
在移动节点中代码就像这样
$('#jstree').on('move_node.jstree', function (e, data) {
debugger;
var parent = $('#jstree').jstree(true).get_node(data.node.parent);
var position = 0;
for (var i in parent.children) {
var curChildren = $('#jstree').jstree(true).get_node(parent.children[i]);
if (curChildren.data.order==-1)
{
continue;
}
curChildren.data.order = position;
position = position + 1;
}
//var nodePosition = $.inArray(data.node.id, parent.children);
});