ExtJS远程过滤 - 确定服务器端的过滤器数据类型

时间:2014-10-27 14:13:53

标签: extjs extjs-mvc gridpanel extjs5

我正在ExtJS MVC应用程序中的gridpanels上实现远程过滤。客户端正确地将序列化过滤器发送到服务器端但不幸的是在服务器端我无法确定哪种类型的数据是过滤器。我目前正在以这种格式接收json数据:

[{\"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 个答案:

答案 0 :(得分: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支持团队!