【问题标题】:ExtJS remote filtering - determine filter data type on the server sideExtJS 远程过滤 - 在服务器端确定过滤器数据类型
【发布时间】:2014-10-27 14:13:52
【问题描述】:

我正在我的 ExtJS MVC 应用程序中的网格面板上实现远程过滤。客户端正确地将序列化过滤器发送到服务器端,但不幸的是在服务器端我无法确定过滤器是哪种类型的数据。我目前正在接收这种格式的 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
    }
}


});

以下代码片段是网格面板中的列:

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

非常感谢任何建议。

【问题讨论】:

    标签: extjs extjs-mvc gridpanel extjs5


    【解决方案1】:

    在 overrides 文件夹中定义这两个覆盖是解决问题的好方法。

    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 支持团队!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-13
      • 2022-10-17
      • 1970-01-01
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 2018-04-28
      相关资源
      最近更新 更多