ExtJS 4.2.1 でツリーパネルを使用しています。afteritemexpand
以前は、ツリーのノードを展開するときに、リスナーを使用して dom 要素に変更を設定していました (クラス名を正確に変更) 。実際、奇数色の葉とは異なる色の偶数インデックスの葉を持つことでした。うまくいきました。興味のある項目の ID を取得して、それらにアクセスし、className を変更します。別のツリーでも同じようにしましたが、問題は、このツリーを作成するときに で展開するexpandAll()
ため、リスナーafteritemexpand
が呼び出されないことです。これexpandAll()
が必要ですが、afteritemexpand
リスナーも必要です。このリスナーを使用する理由は、prototype を使用して item.id に簡単にアクセスできるためです afteritemexpand( node, index, item, eOpts )
。Ext.get(id)
この ID を使用して、メソッドで探している要素を取得できます。私はそれを行うことができますafterlayout
リスナーですが、id へのアクセスはそれほど簡単ではないため、むしろしたくありません。load
dom要素がまだ存在しないため、リスナーではできません。
知りたいのですが、ツリーを完全に拡張して、作成したコードを使用するにはどうすればよいafteritemexpand
ですか?
これが私のリスナーなので、私がやりたいことをよりよく理解できます(実際に'tree-even-node'
は、ツリーの偶数の葉のclassNameに追加するだけです)。
listeners: {
afteritemexpand: function( node, index, item, eOpts ){
var domLeaf = Ext.get(item.id).next();
for ( var int = 0; int < node.childNodes.length; int++) {
if (node.childNodes[int].data.leaf && (int % 2) == 0) {
if (ids.indexOf(domLeaf.id) == -1) {
ids[indiceIds] = domLeaf.id;
indiceIds++;
}
}
domLeaf = domLeaf.next();
}
for ( var int = 0; int < ids.length; int++) {
domLeaf = Ext.get(ids[int]);
if (domLeaf != null) {
for ( var int2 = 0; int2 < domLeaf.dom.children.length; int2++) {
if (domLeaf.dom.children[int2].className.search('tree-even-node') == -1){
domLeaf.dom.children[int2].className += ' tree-even-node';
}
}
}
}
}