2011-09-21 2 views
3

ОК, так вот, как я могу найти тока разрушились в макете аккордеона:Как запросить текущий расширенный элемент в макете аккордеона

Ext.getCmp("myaccordion").query("{collapsed}") 

Как в том же порядке, что я могу найти расширить один? Я не вижу расширенного свойства. Кроме того, этот код:

Ext.getCmp("myaccordion").query("not:{collapsed}") 

сокрушает мой браузер.

UPD: здесь мое решение, основанное на example в ExtJS документации:

Ext.ComponentQuery.pseudos.expanded = function(items) { 
    var res = []; 
    for (var i = 0, l = items.length; i < l; i++) { 
     if (!items[i].collapsed) { 
      res.push(items[i]); 
     } 
    } 
    return res; 
    }; 

А потом я просто запросить этот путь Ext.getCmp("myaccordion").query(">*:expanded")

Но мы можем сделать его короче, используя :not каким-то образом?

ответ

1

Вы можете сделать:

Ext.onReady(function(){ 

    var p1 = Ext.create('Ext.panel.Panel', { 
     renderTo: document.body, 
     width: 100, 
     height: 100, 
     title: 'Foo', 
     collapsed: true 
    }); 

    var p2 = Ext.create('Ext.panel.Panel', { 
     renderTo: document.body, 
     width: 100, 
     height: 100, 
     title: 'Foo', 
     collapsed: false 
    }); 

    console.log(Ext.ComponentQuery.query('[collapsed=false]')); 

}); 
+0

не работает для меня. Это возвращает что-то, но это определенно * не * противоположно foo.query ("{collapsed}"). Я не буду его понижать, поскольку он, тем не менее, предоставляет некоторую полезную информацию, но было бы неплохо, если бы вы предоставили более точный ответ. – shabunc

+0

Я обновил свой ответ, вы можете увидеть, что вы можете запросить свернутое значение false. –

2

Вы не должны использовать функцию для этого компонента запроса.

Если у вас есть другие панели где-то в вашей структуре, которые не рушились query('[collapsed=false]') также включали бы те, которые, вероятно, были проблемой, с которой вы столкнулись.

Но вы можете ограничить запрос только к прямых детей по телефону child вместо:

Ext.getCmp("myaccordion").child("[collapsed=false]"); 

Или вы можете ограничить его, чтобы направить детей в самой строке селектора, если вы даете Аккордеон в id конфигурации, как вам кажется: (id: 'myaccordion'). Вы можете использовать:

Ext.ComponentQuery.query('#myaccordion > panel[collapsed=false]') 

Если у вас есть аккордеон настроенный только один расширенной панели в то время (конфигурации по умолчанию), который даст вам массив с одним элементом - расширенной панели. Если у вас более одной расширенной панели, каждая из них будет содержаться в массиве.

Смежные вопросы