2014-10-27 103 views
2

我在ExtJS MVC應用程序的網格面板上實現遠程過濾。客戶端正確地將序列化過濾器發送到服務器端,但不幸的是,在服務器端,我無法確定哪種類型的數據是過濾器。我目前正在接受這種格式的JSON數據:ExtJS遠程過濾 - 確定服務器端的過濾器數據類型

[{\"operator\":\"gt\",\"value\":1412114400000,\"property\":\"ExpirationDate\"}] 

我想有一個多場報告在此JSON數據類型,例如:

[{\"operator\":\"gt\",\"value\":1412114400000,\"property\":\"ExpirationDate\",\"dataType\":\"date\""}] 

這是模型

Ext.define('CGovAuthWeb.model.UtenteModel', { 

extend: 'Ext.data.Model', 
fields: [ 
    { name: 'ID' }, 
    { name: 'Userid '}, 
    { name: 'UserName'}, 
    { name: 'Password'}, 
    { name: 'Email'}, 
    { name: 'Comment'}, 
    { name: 'IsApproved'}, 
    { name: 'IsLockedOut'}, 
    { name: 'IsOnline'}, 
    { name: 'ExpirationDate'}, 
    { name: 'LastActivityDate' }, 
    { name: 'CreationDate'}, 
    { name: 'LastLockoutDate'}, 
    { name: 'LastLoginDate'}, 
    { name: 'LastPasswordChangedDate' }, 
    { name: 'BloccatoChanged', defaultValue : true} 
], 

idProperty: 'ID' 

}); 

這家店看起來是這樣的:

Ext.define('CGovAuthWeb.store.UtenteStore', { 

extend: 'Ext.data.Store', 

autoSync: false, 
remoteFilter: true, 
remoteSort: true, 

requires: ['CGovAuthWeb.model.UtenteModel'], 
model: 'CGovAuthWeb.model.UtenteModel', 

storeId: 'Utente', 
pageSize: 15, 

proxy: { 
    type: 'rest', 
    url: 'api/utente', 
    reader: { 
     type: 'json', 
     rootProperty: 'Results', 
     messageProperty: 'Message', 
     totalProperty: 'Total', 
     idProperty: 'ID', 
     successProperty: 'Success' 
    }, 

    writer: { 
     type: 'json', 
     writeAllFields: true 
    } 
} 


}); 

下面的代碼片斷是在GridPanel中柱:

 { 
      flex: 2, 
      header: 'Scadenza', 
      dataIndex: 'ExpirationDate', 
      editor: { 
       xtype: 'datefield', 
       allowBlank: true, 
       format: 'd/m/Y', 
      }, 
      filter: { 
       type: 'date' 
      } 
     }, 

任何建議是真正理解。

回答

1

在覆蓋文件夾中定義這兩個覆蓋是一個很好的解決方案。

Ext.define('Ext.override.grid.filters.filter.Base', { 
override: 'Ext.grid.filters.filter.Base', 
createFilter: function(config, key) { 
    var me = this, 
     filter = me.callParent(arguments), 
     type = me.getInitialConfig('type'); 
    filter.type = type; 
    return filter; 
} 
}); 
Ext.define('Ext.override.util.Filter', { 
override: 'Ext.util.Filter', 
getState: function() { 
    var me = this, 
     state = this.callParent(arguments); 
    if (me.type) { 
     state.type = me.type; 
    } 
    return state; 
} 
}); 

此修改後需要使用sencha cmd進行應用程序刷新。在應用程序根文件夾中運行命令:

sencha app refresh 

很多感謝Sencha支持團隊!