1

我正在使用 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';
                                }
                            }
                        }
                    }
                }
4

1 回答 1

1

我终于同时使用了loadafteritemexpand听众。加载使我能够很容易地获得正确的 id,并且我可以设置 classNames,afteritemexpand因为我知道 dom 元素已加载,所以我nullExt.get(id). 它工作得很好。

这是代码:

listeners: {
                load: function(node, records, successful, eOpts) {
                    var ownertree = records.store.ownerTree;
                    var boundView = ownertree.dockedItems.items[1].view.id;
                    var generalId = boundView+'-record-';

                    if (!node.tree.root.data.leaf) {
                        // Process each child node
                        node.tree.root.cascadeBy(function(currentChild) {
                            // Process only leaf
                            if (currentChild.data.leaf) {
                                var nodeId = ""+generalId+currentChild.internalId;
                                var index = currentChild.data.index;
                                if ( (index % 2) == 0 && ids.indexOf(nodeId) == -1 ) {
                                    // even nodes
                                    ids[indiceIds] = nodeId;
                                    indiceIds++;
                                } 
                               console.log(ids);
                            }
                        });
                    }
                },
                afteritemexpand: function( node, index, item, eOpts ){
                    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';
                                }
                            }
                        }
                    }
                },  
于 2013-07-16T08:11:24.297 回答