extjs rowexpander как развернуть все

Я использую Ext.ux.grid.RowExpander

var expander = new Ext.ux.grid.RowExpander({
  tpl : new Ext.Template(
 '<p>{history}</p>'
 )
});

он используется в моей сетке:

 var grid = new Ext.grid.GridPanel({
        store: store,
        columns: [
            expander,
        ...

Теперь я хочу, чтобы все строки расширителя были расширены по умолчанию.

Я пытаюсь использовать expander.expandRow(grid.view.getRow(0)); (думаю, если я это сделаю, я смогу использовать цикл for :), но получаю сообщение об ошибке

this.mainBody is undefined @ ***/ext/ext-all.js:11

Пожалуйста, помогите мне расширить все строки моей сетки! Спасибо!


person k102    schedule 15.07.2011    source источник


Ответы (4)


Вы можете сделать это с помощью цикла, это довольно просто...

for(i = 0; i <= pageSize; i++) {
   expander.expandRow(i);
}

Где pageSize — количество записей на странице в вашей сетке. В качестве альтернативы вы можете использовать счетчик магазина (возможно, более масштабируемое решение)...

for(i = 0; i <= grid.getStore().getCount(); i++) {
    expander.expandRow(i);
}
person JamesHalsall    schedule 15.07.2011
comment
м... у меня та же ошибка, что и в моем вопросе. может быть, мой expander как-то неверен? - person k102; 15.07.2011
comment
Вы добавили свой расширитель в конфигурацию plugins в своей сетке? - person JamesHalsall; 15.07.2011
comment
extjs 3.3.1. моя сетка и расширитель работают нормально, все, что я хочу, это просто расширить их по умолчанию (на рендере, я думаю) - person k102; 15.07.2011
comment
приведенный выше код отлично работает в моем приложении extjs 3.3, попробуйте заменить expander на grid.plugins - person JamesHalsall; 15.07.2011
comment
нет такого метода expandRow, см. https://docs.sencha.com/extjs/6.2.0/modern/Ext.grid.plugin.RowExpander.html - person user1346730; 15.02.2019

В 4.1.3 я использую этот метод

function expand() {
    var expander = grid.plugins[0];
    var store = grid.getStore();

    for ( i=0; i < store.getCount(); i++ ) {
        if (expander.isCollapsed(i)) {
            expander.toggleRow(i, store.getAt(i));
        }
    }
}
person krevedko    schedule 18.09.2013

Если в вашей сетке используется DirectStore или какой-либо другой механизм RPC, вы можете прослушивать событие загрузки хранилища:

grid.store.addListener('load', function() {
  var expander = grid.plugins;
  for(i = 0; i < grid.getStore().getCount(); i++) {
    expander.expandRow(i);
  }
}

Кстати: должно быть "i ‹..." вместо "i ‹=...".

person felixhummel    schedule 13.09.2011
comment
Мне пришлось использовать grid.getView().on('refresh', ... вместо этого с ExtJS 4.1, а grid.plugins — это массив, и я искал в нем расширитель. - person Knickedi; 29.08.2012

Вы можете объявить объект группировки, а затем вызвать его из GridPanel:

// grouping
var grouping = Ext.create('Ext.grid.feature.Grouping',{
    startCollapsed: true, // sets the default init collapse/expand all
});

var grid = new Ext.grid.GridPanel({
    store: store,
    columns: [
        expander,
    ...

Затем добавьте этот код в тело GridPanel:

    // collapse/expand all botton
    tbar: [{
                text: 'collapse all',
                handler: function (btn) {        
                    grouping.collapseAll();
                }
            },{
                text: 'expand all',
                handler: function (btn) {        
                    grouping.expandAll();
                }
            }],

Он добавит две кнопки, которые разворачивают/сворачивают все группы. Если вы хотите, чтобы все было развернуто/свернуто по умолчанию, обратите внимание на переменную startCollapsed выше.

person shleimel    schedule 05.08.2012