9

ExtJs で特定のノードをクリックしているときに、ツリーの兄弟ノードを確認する方法を知りたいです。

各ノードに ID を指定し、クリックしたノードの ID にアクセスできます。次に、子ノードを自動的にチェックするにはどうすればよいですか??

誰か私を助けてください..

4

7 に答える 7

7
// or any other way of getting hands on the node you want to work with
var node = treePanel.getNodeById('your-id');
node.eachChild(function(n) {
    n.getUI().toggleCheck(true);
});

これを現在のノードのサブツリー全体で機能させたい場合は、再帰を行う必要があります。

もう少し統合:

treePanel.on('checkchange', function(node, checked) {
    node.eachChild(function(n) {
        n.getUI().toggleCheck(checked);
    });
});
于 2010-02-16T15:39:27.830 に答える
5
function nodeCheck(node) {
    node.eachChild(function(n) {
        if(n.hasChildNodes())
            nodeCheck(n)
        n.getUI().toggleCheck(false);
    });
}
var node = (tree.getSelectionModel().getSelectedNode()) ? tree.getSelectionModel().getSelectedNode() : tree.root;
if(node) nodeCheck(node);

それは私にとってはうまくいきます;)

于 2010-09-20T12:56:37.507 に答える
2

リスナー:{

checkchange : function(node, checked) {
    node.parentNode.cascadeBy(function(n){n.set('checked', checked);});
}

}

于 2011-12-30T06:01:40.827 に答える
1
function checkChange(node, checked, Object) {
    node.cascadeBy(function(n) {
        n.set('checked', checked);
    });
}
于 2012-08-30T22:15:53.947 に答える
1

Cさんの回答は正常に動作します(ExtJS 4.2)が、親ノードの子ノードが1つの子を持つ場合にバグが発生します。これが私の少しの改善です。誰かがさらに改善できる

function (node, checked) {

    if (node.isLeaf()) {
        node = node.parentNode;
        var siblingStateEqual = true;
        if (node.childNodes.length == 1) {
            siblingStateEqual = checked;
        } else {
            node.cascadeBy(function (n) {
                if (n != node) {
                    if (n.get('checked') != checked) {
                        siblingStateEqual = false;
                    }
                }

            });
        }

        if (siblingStateEqual == checked) {
            node.set('checked', checked);
        }

    }
    else {
        node.cascadeBy(function (n) {
            n.set('checked', checked);
        });
    }
}
于 2013-09-20T02:34:16.993 に答える
0

JSONまたはXMLでは、ノードにデータを入力するときに「checked」プロパティをtrueまたはfalseに設定する必要があります。これを行うためにAsyncTreeNodeを使用していると想定しています。このチェックされたプロパティが存在しない状態でツリーノードが作成された場合、ExtJSはチェックボックスを使用してツリーノードをレンダリングしません。

于 2010-09-08T05:13:32.093 に答える
-1

または、私のように、すべての子リーフノードがチェック/チェック解除されているときに親ノードを自動的にチェック/チェック解除する必要がある場合は、これを試すことができます:

function (node, checked)
{

    if (node.get('leaf'))
    {
        node = node.parentNode;
        var siblingStateEqual = true;
        node.cascadeBy(function (n)
        {
            if (n != node) {
                if (n.get('checked') != checked) {
                    siblingStateEqual = false;
                }
            }

        });

        if (siblingStateEqual == checked)
        {
            node.set('checked', checked);
        }

    }
    else
    {
        node.cascadeBy(function (n) { n.set('checked', checked); });
    }


}
于 2013-02-20T17:31:52.387 に答える