2014-08-09 5 views
0

У меня есть panel что динамически можно добавить в качестве элементов сетку, диаграммы и т.д.ExtJS 4.2 получить магазин детского компонента

Любой из этих «Widgets» (сетки, диаграммы и т.д.) имеют a store.

Мои panel имеет "refresh tool", что onRefreshClick я хочу перезагрузить "Widget" store.

В моем основном контроллере у меня есть:

onRefreshClick: function (tool) { 
     console.log('refresh widget store'); 

     var me = this, 
      panel = tool.up('panel'); 

     // here I want to access the store of the child item. 

     // So I can do: 
     /* 

      widgetStore.load(); 

     */ 

    }, 

Я не знаю, если это виджет сетки, диаграммы, DataView, и т.д.? Поэтому мне просто нужно получить содержимое дочернего компонента.

Любая подсказка о том, как я могу это достичь?

+0

Не уверен, что я понимаю. Ваша сетка, диаграмма и т. Д. Является дочерним компонентом 'panel = tool.up ('panel');'? –

+0

Сетка, диаграмма и т. Д. Являются элементом панели. – VAAA

ответ

0

Я не думаю, что вы можете использовать ComponentQuery для извлечения магазина, так что я хотел бы сделать что-то вроде:

for (var i = 0; i < panel.items.items.length; i++) { 
    try { 
     store = panel.items.items[i].getStore(); 
     if (store != null) break; 
    } catch (err) { 
     //the component you looped through does not have a store... 
    } 
} 

if (store != null) 
    store.load(); 

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

1
Ext.each(panel.query(), function(widget){ 
    if(!Ext.isEmpty(widget.getStore()) widget.getStore().load(); 
}) 
Смежные вопросы