2015-08-24 3 views
0

Есть ли способ показать несколько тел строк для каждой строки в сетке ExtJS?Несколько строк в сетке ExtJS

Дело в том, что мне нужно показать один до и один после каждой строки. Я мог бы иметь два ряда (один с свойством showBefore: true), но вы можете добавить только одно тело строки, насколько я знаю.

Есть ли простой способ сделать это? Мне кажется, что нет другого выхода, кроме как написать переопределение.

+0

Ext JS сетки также не могут сделать кофе, так что да, вам нужно переопределить или расширить свой класс. Попробуйте настроить ['rowTpl'] (https://docs.sencha.com/extjs/6.0/6.0.0-classic/#!/api/Ext.view.Table-property-rowTpl). Кстати, о чем «showBefore» вы говорите? Не удается увидеть его в документе API. – Greendrake

+0

На самом деле это 'bodyBefore'. Я написал переопределение для «extraRowTpl». Просто дублированный код для создания rowBody и добавление параметра для определения того, какой из них является. – drinovc

ответ

0
Ext.define("App.override.grid.feature.RowBody", { 
    override: "Ext.grid.feature.RowBody", 

    extraRowTpl: [ 
     '{%', 
     'if(this.rowBody.bodyBefore) {', 
     'values.view.renderColumnSizer(values, out);', 
     '} else {', 
     'this.nextTpl.applyOut(values, out, parent);', 
     '}', 
     'values.view.rowBodyFeature.setupRowData(values.record, values.recordIndex, values);', 
     '%}', 
     '<tr class="' + Ext.baseCSSPrefix + 'grid-rowbody-tr {rowBodyCls}" {ariaRowAttr}>', 
     '<td class="' + Ext.baseCSSPrefix + 'grid-td ' + Ext.baseCSSPrefix + 'grid-cell-rowbody" colspan="{rowBodyColspan}" {ariaCellAttr}>', 
     '<div class="' + Ext.baseCSSPrefix + 'grid-rowbody {rowBodyDivCls}" {ariaCellInnerAttr}>{rowBody}</div>', 
     '</td>', 
     '</tr>', 

     '{%', 
     'if(this.rowBody.bodyBefore) {', 
     'this.nextTpl.applyOut(values, out, parent);', 
     '}', 
     '%}', 

     // RD ->   
     '{%', 
     'if(this.rowBody.secondRowBody) {', 
     'values.view.rowBodyFeature.setupRowData(values.record, values.recordIndex, values, true);', 
     '}', 
     '%}', 
     '<tpl if="this.rowBody.secondRowBody">', 
     '<tr class="' + Ext.baseCSSPrefix + 'grid-rowbody-tr {rowBodyCls}" {ariaRowAttr}>', 
     '<td class="' + Ext.baseCSSPrefix + 'grid-td ' + Ext.baseCSSPrefix + 'grid-cell-rowbody" colspan="{rowBodyColspan}" {ariaCellAttr}>', 
     '<div class="' + Ext.baseCSSPrefix + 'grid-rowbody {rowBodyDivCls}" {ariaCellInnerAttr}>{rowBody}</div>', 
     '</td>', 
     '</tr>', 
     '</tpl>', 
     // RD -> 

     { 
      priority: 100, 
      beginRowSync: function(rowSync) { 
       rowSync.add('rowBody', this.owner.eventSelector); 
      }, 
      syncContent: function(destRow, sourceRow, columnsToUpdate) { 
       var owner = this.owner, 
        destRowBody = Ext.fly(destRow).down(owner.eventSelector, true), 
        sourceRowBody; 

       if (destRowBody && (sourceRowBody = Ext.fly(sourceRow).down(owner.eventSelector, true))) { 
        Ext.fly(destRowBody).syncContent(sourceRowBody); 
       } 
      } 
     } 
    ], 

    //setupRowData: function(record, rowIndex, rowValues) { 
    setupRowData: function(record, rowIndex, rowValues, isSecondRowBody) { // RD 
     if (this.getAdditionalData) { 
      //Ext.apply(rowValues, this.getAdditionalData(record.data, rowIndex, record, rowValues)); 
      Ext.apply(rowValues, this.getAdditionalData(record.data, rowIndex, record, rowValues, isSecondRowBody)); // RD 
     } 
    } 

});