1

我正在使用非常好的jsTree 。拖拽的时候,其实并不关心before和after类型,只想在里面使用。意思是,我只关心将孩子放入的父级,而不关心父级内部其他元素的顺序。

所以,我想建立我的回调,所以它总是引用它所在的父节点。但是,这还不是万无一失的。

onmove : function (NODE,REF_NODE,TYPE,TREE_OBJ,RB) {
    if (TYPE == 'inside') {
        alert('Item to move:'+$(NODE).attr('rel')+' to '+$(REF_NODE).attr('rel')+' '+TYPE);
    } else if (TYPE == 'after') {
        alert('Item to move:'+$(NODE).attr('rel')+' to '+$(REF_NODE).parent().parent('li').attr('rel')+' '+TYPE);
    }
},

有没有人有建议,我可以如何更改我的回调,以便 REF_NODE 始终是节点移动到的父节点?而不是兄弟姐妹,哪个是父母的孩子?

这是关于 jsbin 的示例:http: //jsbin.com/uroye3/2

尝试示例时,将其他文件夹拖到 Templates 文件夹中。应该提醒您正在将其他文件夹移动到文件夹 4。但是,如果您在拖入 Templates 文件夹之前和之后尝试不同,您有时会得到未定义。因此,结果并不总是如预期的那样。就像我说的,我总是想知道父文件夹,在这种情况下是 4,另一个文件夹被放入。

4

1 回答 1

2

取自 jstree FAQ,这可能对您有所帮助:

当在另一个节点“内部”移动或创建节点时,回调 REF_NODE 不会指向新的父节点。该怎么办?

这不是错误!因为您可以在父节点的子节点中的特定位置创建节点,所以仅传递父节点是不够的。这就是为什么您必须始终检查传递给回调的 TYPE 参数的原因!如果您想始终使用父节点 - 在回调顶部添加以下行:

if(TYPE != "inside") { 
  TYPE="inside"; 
  REF_NODE = $(NODE).parents("li:eq(0)").get(0); 
}
于 2010-03-30T11:27:13.363 回答