我正在使用 ExtJS 4.2.1 中的树形面板。afteritemexpand
当我展开树的节点时,我曾经使用侦听器对 dom 元素进行修改(精确地更改类名) 。事实上,它是具有与具有奇数颜色的叶子不同的颜色的具有偶数索引的叶子。它工作得很好。获取我感兴趣的项目的 id,我可以访问它们,然后修改 className。我对另一棵树做了同样的事情,但问题是当我创建这棵树时,我用 展开它expandAll()
,所以afteritemexpand
不会调用监听器。我需要这个expandAll()
,但我也需要afteritemexpand
听众。我使用这个监听器的原因是因为我可以通过原型轻松访问 item.id afteritemexpand( node, index, item, eOpts )
。有了这个 id,我可以通过该方法获得我正在寻找的元素Ext.get(id)
。我可以用afterlayout
侦听器,但我宁愿不这样做,因为访问 id 并不那么容易。我不能用load
监听器来做,因为 dom 元素还不存在。
所以我想知道,我怎样才能完全扩展我的树并使用我为我的代码制作的代码afteritemexpand
?
这是我的听众,所以你可以更好地理解我想要做的事情(实际上只是添加'tree-even-node'
到我的树的叶子的类名中)。
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';
}
}
}
}
}