2013-04-08 3 views
0

Магазин получает ответ от сервера как JSON. В некоторых случаях поле card_number пуст. Моя задача - скрыть столбец, когда поле card_number пуст. Теперь этот столбец показывает и показывает пустые значения. Я могу изменить любую часть кода, включая ответ сервера.Столбцы просмотра зависят от ответа сервера extjs 4

Модель:

Ext.define('Guard.model.Report', { 
extend : 'Ext.data.Model', 
fields : [ 'first_name', 'last_name', 'card_number'] }); 

Вид:

Ext.define('Guard.view.report.Export', { 
extend: 'Ext.grid.Panel', 
alias : 'widget.exportreport', 
uses: [ 
    'Ext.ux.exporter.Exporter' 
], 
initComponent: function() { 
    this.store = 'ReportCreate'; 

    this.dockedItems = [{ 
     xtype: 'toolbar', 
     dock: 'top', 
     items: [ { 
      xtype: 'button', 
      text : _msg_btn_load_reports_csv,    
      id : 'loadcsv', 
      iconCls : 'loadcsvIcon' 
     }] 
    }]; 
    this.columns = [ { 
     text : _msg_tbl_head_fname, 
     align: 'center', 
     dataIndex : 'first_name', 
     flex : 1, 
     renderer: function(value) { 
      if(!value) { 
       return _msg_grid_default_unknown; 
      } 
      return value; 
     } 
    },{ 
     text : _msg_tbl_head_lname, 
     align: 'center', 
     dataIndex : 'last_name', 
     flex : 1, 
     renderer: function(value) { 
      if(!value) { 
       return _msg_grid_default_unknown; 
      } 
      return value; 
     } 
    },{ 
     text : _msg_tbl_head_card_number, 
     align: 'center', 
     dataIndex : 'card_number', 
     flex : 1 
    }]; 

    this.callParent(arguments); 
}}); 

Магазин:

Ext.define('Guard.store.ReportCreate', { 
extend: 'Ext.data.Store', 
model: 'Guard.model.Report', 
proxy: { 
    type: 'ajax', 
    url: 'php/reports.php', 
    reader: { 
     type: 'json', 
     root: 'reportCreate', 
     successProperty: 'success' 
    } 
} 
}); 
+0

Вы хотите, чтобы скрыть его, если все строки не имеют значения там? – bldoron

+0

@bldoron Есть два случая: во первых, все строки имеют значение, во вторых, все строки не имеют значения. –

ответ

0

Хорошо, мое решение довольно неудобно, может быть лучше.
Добавить на функцию загрузки в магазине:

listeners: { 
    load: function(store, records){ 
    var hasContent = false; 
    Ext.Array.each(records, function(obj, index, arr) { 
     hasContent = (obj.get('card_number') >= 0); 
    }); 
    if (!hasContent) { 
     // pseudo code: grid.colomn name hide() 
    } 
    } 
} 
+0

Он сказал, что либо ВСЕ поля имеют или не имеют значений. Поэтому нет необходимости перебирать петлю. Просто выполните: var hasContent = records.length &&! Ext.isEmpty (записи [0] .get ('card_number')); –

+0

Возможно, вы правы. Не понял этого. – bldoron

+0

Большое спасибо! Ты помог мне. –

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