jstree crrm.move.check_move cy并不总是定义的

时间:2013-02-28 10:06:23

标签: copy jstree

我想实现crrm.move.check_move,其功能是我可以检查节点是否被移动或复制,以及用户是否有权这样做。我的代码如下所示:

var _isUserHasRightToMoveNodes = false; // set depending on user rights
var _isUserHasRightToCopyNodes = true; // set depending on user rights

var _jsTreePlugins = ["themes", "html_data", "ui"];
if ((_isUserHasRightToMoveNodes) || (_isUserHasRightToCopyNodes)) {
    _jsTreePlugins.push("dnd");
    _jsTreePlugins.push("crrm");
}

$( this ).jstree({
     plugins: _jsTreePlugins,
     ...,
     crrm : {
        "move" : {
            "check_move" : function( m ) {
                // wenn der Knoten verschoben wird
                if ((!_isUserHasRightToMoveNodes) && ((m.cy == null) || (!m.cy)))
                return false;
                // wenn der Knoten kopiert wird
                if ((!_isUserHasRightToCopyNodes) && (m.cy != null) && (m.cy))
                    return false;
                return true;
             }
        }
     }
});

当我复制一个节点时,它似乎不可能(红十字图标)但它仍然被复制(应该如此)。

我已经使用firebug进行了调试并发现,m.cy仅在节点被删除时定义,而不是在鼠标悬停在其他节点上时定义,因此红十字图标。但是当然一旦它被删除,m.cy被定义并且节点被复制,正如它应该的那样。

我做错了什么或者这是一个错误?有没有解决办法?

感谢您的帮助! 塔尼娅

1 个答案:

答案 0 :(得分:0)

Your return is not as expected - Sample code below should help you:

"crrm": {
    "move" : {
         "check_move" : 
             function(tree)
             {
               //check the condition to enable the drag
                   if(tree.r.attr("id") !=  ...){   
                        return {
                               after : true,
                               before : false,
                               inside : false
                               }
                   }else{
                    return false;
                   }       
              }            
          }
}