Dynatree-ノードが選択されたときに子ノードのチェックボックスを無効(または非表示)にします

ファルサレラ

dynatreeディレクトリの階層でマルチノードを選択するために使用しています。

そこで、のすべての組み込みオプションの動作を調査しましたselectModeが、残念ながら、いずれも私の問題を解決しません。

  • 1:単一選択(私の場合ではない)
  • 2:複数選択
    • すべての子ノードが選択されている場合、親ノードは選択されません(ok)
    • 親ノードが選択されている場合、すべての子ノードが選択されるわけではありません(OKではありません)
  • 3:階層的な複数選択
    • すべての子ノードが選択されたときに親ノードを選択します(OKではありません)
    • 親ノードが選択されると、すべての子ノードが選択されます(ok)

私の場合の動作は、次の場合に正しくなります。

  • すべての子ノードが選択されている場合、親ノードは選択されません
    • すべての子ディレクトリを選択することは、それらの親を選択することとは異なります
  • 親ノードが選択されると、すべての子ノードが選択されます
    • そうしないと、ユーザーは子も選択されていることを理解できない可能性があります

質問1:この動作を実装する方法は?

さらに、dtnode.tree.getSelectedNodes()は冗長ノードを返しています。

/Foo
/Foo/Bar

/Fooが選択されている場合/Foo/Bar、私にとっては、選択されていることがすでに暗示されています。

質問2:選択したノードの冗長性を最適化する方法は?

ファルサレラ

私が見ている最善の解決策はselectMode: 2、ノードを選択するときに子のチェックボックスの表示を使用して切り替えることです。

//enable or disable redundant children nodes recursively
function toggleChildrenNodes(disableChildren, dtnode) {
    if (!dtnode)
        return;

    if (!dtnode.childList)
        return;

    for (var chIdx = 0; chIdx < dtnode.childList.length; chIdx++) {
        dtnode.childList[chIdx].data.hideCheckbox = disableChildren;
        dtnode.childList[chIdx].render(true);
        //when re-enabling a child node that was previously selected, it should disable their children
        toggleChildrenNodes(disableChildren || dtnode.childList[chIdx].isSelected(), dtnode.childList[chIdx]);
    }
}

$('#myTree').dynatree({
    selectMode: 2,
    checkbox: true,
    onSelect: function(isSelected, dtnode) {
        if(!dtnode)
            return;

        toggleChildrenNodes(isSelect, dtnode);

        //gets the optimized selected nodes
        var dryNodes = $.map(dtnode.tree.getSelectedNodes(), function(currentSelectedNode, idx) {
            if (!currentSelectedNode.data.hideCheckbox) { //skip redundant nodes
                return currentSelectedNode.data.key;
            }
            return null;
        });
        console.log(dryNodes);
    }
});

さらに、ツリーノードの拡張が遅延している場合は、一貫性を保つために新しい子ノードを処理する必要があります。

onLazyRead: function(dtnode) {
    if(!dtnode)
        return;

    //[...] business logic

    //[...] possible iteration to add N children

    dtnode.addChild({
        //[...] other properties

        //creates childnode with the checkbox hidden if the parent is selected or hidden due to a higher ancestor
        hideCheckbox: dtnode.isSelected() || dtnode.data.hideCheckbox
    });
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Dynatree:ノードを選択するときにすべての兄弟ノードを自動的に選択します

分類Dev

Dynatree-javascript Add Edit&Deleteノード

分類Dev

一部のDynatreeノードのみをドロップ可能にする

分類Dev

dynatreeをfancytreeに移行する方法は?

分類Dev

dynatreeでノードがアクティブ化されるとはどういう意味ですか?

分類Dev

dynatree-ノードのドラッグアンドドロップでのノードの表示順序の更新

分類Dev

dynatreeの行要素のクリックを許可する方法

分類Dev

Dynatree子供ajaxのURLを変更する方法

分類Dev

Dynatree追加属性

分類Dev

JQuery Dynatree-レベル区切り文字でノードを検索する方法は?

分類Dev

ツリービューから選択した子ノードに応じてチェックボックスを設定します

分類Dev

ロードされたときにRecyclerView内のチェックボックスをチェックします

分類Dev

Angular 2FormBuilderはチェックボックス選択のフィールドを無効にします

分類Dev

JavaScriptは、チェックボックス付きのテーブルの行全体を選択し(背景色を変更)、次のチェックボックスがクリックされたときに選択を解除します

分類Dev

Jquery:チェックボックスがクリックされたときに1つのフォームフィールドを有効にし、他のフィールドを無効にします

分類Dev

チェックされたノードとその親のみをjstreeに表示します

分類Dev

input = "radio"を選択したときにチェックボックスを有効/無効にします

分類Dev

ヴァーディン。空のときに選択されたチェックボックスを表示する複数選択グリッド

分類Dev

2つが選択されたときにチェックボックスのグループを無効にするjquery関数の重複コードを取り除く方法は?

分類Dev

選択したツリービューノードのテキストをクリップボードにコピーしようとしていますが、クリップボードの最後のノードのみを取得しています

分類Dev

ツリーが最初に表示されたときに、チェックされたjstreeノードを表示するにはどうすればよいですか?

分類Dev

dynatreeのajax呼び出しを介してURLにアンカーを追加するにはどうすればよいですか?

分類Dev

jquery dynatreeプラグインをアコーディオンメニューとして使用するにはどうすればよいですか?

分類Dev

1つのチェックボックスが選択されたときに、ACFで作成された別のブロックで他のチェックボックスを非表示にするにはどうすればよいですか?

分類Dev

新しい情報が Divs に表示されたら (チェックボックスの選択を介して) スクロール/下に配置します。

分類Dev

チェックボックスは、私が選択したものは常にチェックされます

分類Dev

jQuery: div またはその子ノードがクリックされたときにドロップダウンをトリガーする

分類Dev

正しいデータをチェックボックスに渡したときに、チェックボックスが選択されて表示されないのはなぜですか?

分類Dev

ユーザーのチェックボックスの選択に基づいてドロップダウンボックスを表示または非表示にします

Related 関連記事

  1. 1

    Dynatree:ノードを選択するときにすべての兄弟ノードを自動的に選択します

  2. 2

    Dynatree-javascript Add Edit&Deleteノード

  3. 3

    一部のDynatreeノードのみをドロップ可能にする

  4. 4

    dynatreeをfancytreeに移行する方法は?

  5. 5

    dynatreeでノードがアクティブ化されるとはどういう意味ですか?

  6. 6

    dynatree-ノードのドラッグアンドドロップでのノードの表示順序の更新

  7. 7

    dynatreeの行要素のクリックを許可する方法

  8. 8

    Dynatree子供ajaxのURLを変更する方法

  9. 9

    Dynatree追加属性

  10. 10

    JQuery Dynatree-レベル区切り文字でノードを検索する方法は?

  11. 11

    ツリービューから選択した子ノードに応じてチェックボックスを設定します

  12. 12

    ロードされたときにRecyclerView内のチェックボックスをチェックします

  13. 13

    Angular 2FormBuilderはチェックボックス選択のフィールドを無効にします

  14. 14

    JavaScriptは、チェックボックス付きのテーブルの行全体を選択し(背景色を変更)、次のチェックボックスがクリックされたときに選択を解除します

  15. 15

    Jquery:チェックボックスがクリックされたときに1つのフォームフィールドを有効にし、他のフィールドを無効にします

  16. 16

    チェックされたノードとその親のみをjstreeに表示します

  17. 17

    input = "radio"を選択したときにチェックボックスを有効/無効にします

  18. 18

    ヴァーディン。空のときに選択されたチェックボックスを表示する複数選択グリッド

  19. 19

    2つが選択されたときにチェックボックスのグループを無効にするjquery関数の重複コードを取り除く方法は?

  20. 20

    選択したツリービューノードのテキストをクリップボードにコピーしようとしていますが、クリップボードの最後のノードのみを取得しています

  21. 21

    ツリーが最初に表示されたときに、チェックされたjstreeノードを表示するにはどうすればよいですか?

  22. 22

    dynatreeのajax呼び出しを介してURLにアンカーを追加するにはどうすればよいですか?

  23. 23

    jquery dynatreeプラグインをアコーディオンメニューとして使用するにはどうすればよいですか?

  24. 24

    1つのチェックボックスが選択されたときに、ACFで作成された別のブロックで他のチェックボックスを非表示にするにはどうすればよいですか?

  25. 25

    新しい情報が Divs に表示されたら (チェックボックスの選択を介して) スクロール/下に配置します。

  26. 26

    チェックボックスは、私が選択したものは常にチェックされます

  27. 27

    jQuery: div またはその子ノードがクリックされたときにドロップダウンをトリガーする

  28. 28

    正しいデータをチェックボックスに渡したときに、チェックボックスが選択されて表示されないのはなぜですか?

  29. 29

    ユーザーのチェックボックスの選択に基づいてドロップダウンボックスを表示または非表示にします

ホットタグ

アーカイブ