2013-07-15 6 views
1

Я работаю с деревом в ExtJS 4.2.1. Я использовал для установки модификаций элементов dom (точно изменить имя класса) с помощью слушателя afteritemexpand, когда я расширяю узлы своего дерева. Фактически это должно было иметь листья с четным индексом с другим цветом, чем листья с нечетным цветом. Все нормально. Получение идентификаторов интересующих меня элементов, я могу получить к ним доступ, а затем изменить имя класса. Я сделал то же самое для другого дерева, но проблема в том, что при создании этого дерева я разворачиваю его с помощью expandAll(), поэтому слушатель afteritemexpand не вызывается. Мне нужно это expandAll(), но мне нужен и слушатель afteritemexpand. Причина, по которой я использую этот слушатель, заключается в том, что у меня есть легкий доступ к item.id с прототипом afteritemexpand(node, index, item, eOpts). С этим id я могу получить элемент, который я ищу, с помощью метода Ext.get(id). Я могу сделать это с помощью слушателя afterlayout, но я бы предпочел не потому, что доступ к id не так прост. Я не могу сделать это с прослушивателем load, потому что элементов dom еще нет.Listener afteritemexpand из ExtJS 4.2.1

Итак, я хочу знать, как я мог полностью расширить свое дерево и использовать код, который я сделал для своего 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'; 
           } 
          } 
         } 
        } 
       } 

ответ

1

Я наконец использовал оба load и afteritemexpand слушателей. Загрузка позволяет мне получить правильные идентификаторы довольно легко, и я могу установить классNames с afteritemexpand, потому что я знаю, что элементы dom загружены, поэтому я не получаю null с моим Ext.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'; 
           } 
          } 
         } 
        } 
       }, 
Смежные вопросы