Вложенная сетка с extjs 4

Я могу поставить сетку в плагины другой сетки.

это моя сетка и я хочу поставить в конфиг 'плагины' доп сетку.

 var grid = new Ext.grid.GridPanel({
                    store: store,
                    columns: [
        { header: 'Customer Name', dataIndex: 'CustomerName', width: 212 },
        { header: 'Charge Date', dataIndex: 'ChargeDate', width: 212 },
        { header: 'Package Plan', dataIndex: 'PackagePlan', width: 212 },
        { header: 'Current Invoice Sum', dataIndex: 'CurrentInvoiceSum', width: 212 }
     ],
                    plugins: [{
                        ptype: 'rowexpander',
                        rowBodyTpl: ['<div style="background-color:#CBDDF3; width:643px;margin-left:147px;margin-bottom: 20px;border: 1px solid;">',
            '<p><b>Customer Details:</b><br/>{CustomerName}<br/> {CustomerAddress}, {CustomerPhone}, {CustomerEmail} </p>',
                                '<p><b>Package Type:</b> {PackagePlan}<br/>',
                                '<b>Invoice Details:</b></p>',
                   '<div class="nestedO" id="{InvoiceId}"></div> </div>',
        ]
                    }],
                    width: 900,
                    height: 450,
                    renderTo: Ext.get('Ongoing')
                });

Является ли это возможным?


person Hadas    schedule 24.11.2011    source источник


Ответы (1)


Возможны вложенные сетки. Вот решение с форумов Sencha:

http://www.sencha.com/forum/showthread.php?151442-Nested-EXTJS-4-Grids&p=668193&viewfull=1#post668193

Ты почти понял. В части плагина мы создадим пустой div, в который мы будем отображать нашу вложенную сетку:

plugins: [{
        ptype: "rowexpander",
        rowBodyTpl: ['<div id="SessionInstructionGridRow-{ClientSessionId}" ></div>']    
}],

И когда пользователь расширяет строку сетки, мы отображаем в ней вложенную сетку.

expandbody : function(rowNode,record, expandbody) {
    var targetId = 'SessionInstructionGridRow-' + record.get('ClientSessionId');
    if (Ext.getCmp(targetId + "_grid") == null) {
        var sessionInstructionGrid = Ext.create('TS.view.client.SessionInstruction', {
            renderTo: targetId,
            id: targetId + "_grid"
        });
        rowNode.grid = sessionInstructionGrid;
        sessionInstructionGrid.getEl().swallowEvent(['mouseover', 'mousedown', 'click', 'dblclick', 'onRowFocus']);
        sessionInstructionGrid.fireEvent("bind", sessionInstructionGrid, { ClientSessionId: record.get('ClientSessionId') });
    }
}
person Abdel Raoof Olakara    schedule 24.11.2011
comment
Я рассказываю вам о своей проблеме: я хочу создать вложенную сетку при создании родительской сетки, а не при «расширении тела». Я хочу загрузить данные один раз и часть данных использовать в родительском элементе, а часть - во вложенном. Может быть, у вас есть любое представление об этом. Спасибо - person Hadas; 24.11.2011
comment
В приведенном выше коде не происходит дополнительной загрузки данных. Я привязываю информацию родительской записи к вложенной сетке. Единственное, что происходит в expandbody, это создание экземпляра вложенной сетки и рендеринг. - person Abdel Raoof Olakara; 24.11.2011
comment
Кстати, что значит TS.view.client.SessionInstruction? - person Hadas; 24.11.2011
comment
Это просто имя моего представления (имя вложенной сетки).. укажите соответствующее имя вложенной сетки, чтобы ExtJS мог создать его экземпляр. - person Abdel Raoof Olakara; 24.11.2011
comment
Можно поставить вместо этого 'Ext.gridPanel'? - person Hadas; 24.11.2011
comment
может быть, вы можете проголосовать за меня, чтобы мы могли обсудить в чате. если я использую «Ext.gridPanel», это говорит, что это не конструктор - person Hadas; 24.11.2011
comment
Я успешно использовал приведенный выше код, но проблема, которую я получил, связана с шириной моей внутренней сетки. Когда я добавляю одну дочернюю сетку к моей родительской сетке, все работает нормально, но когда я добавляю две дочерние сетки, дочерние сетки VIEWS принимают ширину, которую я указать в DIV, но таблица сетки получает ширину родительской сетки. - person Waseem; 03.10.2012