2014-10-27 100 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支持团队!