2

selectModeを3(マルチ階層)に設定してdynatreeを使用しています。チェックボックスも使用しているので、フォルダを選択すると、その下のすべての子も選択されます。

遅延読み込みを有効にしました(必要です)。

問題は、フォルダを選択するときにdynaツリーがすべての子をロードしないことです。以前にロードされた子のみを選択します。

マルチ階層を選択する前に、利用可能なすべての子を取得するために必要な遅延読み込みを実行してほしい。

4

3 に答える 3

1

私がこの権利を読んでいるなら、あなたはあなたが親を「チェック」するときに子供たちを「チェック」させようとしているのですか?また、遅延読み込みを使用する場合、子はまだ存在しないため、これは機能しません。

遅延読み込みに追加する子の親が「選択済み」であるかどうかを確認することで、これを回避しました。親が「選択されている」場合、すでに選択されている子をロードします。

ここにあなたが見るためのいくつかのコードがあります。XMLHTTPREQUESTからツリーデータを取得しています。
treeArray [0] = ParentKEY、treeArray [1] = ChildKEY、およびtreeArray [2] = ChildTITLE

function addChildNode(NodeID, NodeName, ParentID){
    jQuery("#tree2").dynatree("getTree").getNodeByKey(ParentID).addChild({title: NodeName, key: NodeID, icon: false, isFolder: true, isLazy: false});
}

/*
*If treeArray[0] "ParentKEY" is selected, create the child already selected.
*/

if(jQuery("#tree2").dynatree("getTree").getNodeByKey(treeArray[0]).isSelected() == true){
    if( jQuery("#tree2").dynatree("getTree").getNodeByKey(treeArray[1]) == null){
        addChildNode(treeArray[1], treeArray[2], treeArray[0]);
        jQuery("#tree2").dynatree("getTree").getNodeByKey(treeArray[1]).select();
    }
}else{
    if( jQuery("#tree2").dynatree("getTree").getNodeByKey(treeArray[1]) == null){
        addChildNode(treeArray[1], treeArray[2], treeArray[0]);
    }
}
于 2012-03-29T17:21:27.360 に答える
1

私は怠惰な読み取りの後に親に選択を強制することによってこれを回避しました:

onLazyRead: function (node) {
    if (!node.data.isLeaf) {
        node.appendAjax({
            success: function (node, event) {
                node.toggleSelect();
                node.toggleSelect();
            }
        });
    }
}
于 2013-03-21T17:28:54.133 に答える