2014-10-27 6 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!