按EXTJS中的int字段过滤存储

时间:2013-11-15 18:46:11

标签: extjs odata

我有一个很棒的模特和商店。我可以从odata源获取记录就好了。我的问题在于不能正确过滤商店。

模型

Ext.define('CostClass', {
    extend: 'Ext.data.Model',
    idProperty: 'CostClassID',
    fields: [{ name: 'CostClassID', mapping: 'WBSCostClassID', type: 'int' },
          { name: 'Class', mapping: 'Class', type: 'string' },
          { name: 'WBSCostSetID', mapping: 'WBSCostSetID', type: 'int' },
          { name: 'CostClassID', mapping: 'WBSCostClassID', type: 'int' },
          { name: 'UseForCAC', type: 'boolean'}]
});

商品

var valueStore = Ext.create('Ext.data.Store', {
        //autoLoad: true,
        autoSync: true,
        model: 'CostClass',
        remoteFilter: true,
        sorters: { property: 'Class', direction: 'ASC' },
        proxy: {
            type: 'odata',
            url: siteUrl + "_vti_bin/PerformancePortalData.svc/WBSCostClasses",
            noCache: false,
            sortParam: undefined,
            limitParam: undefined,
            startParam: undefined,
            pageParam: undefined,
            headers: {
                'Accept': 'application/json'
            },
            reader: {
                type: 'json',
                root: 'd'
            }
        }
    });

过滤代码

valueStore.filter([{ property: 'WBSCostSetID', value: 2, exactMatch: true}]);

这会生成一个看似_vti_bin/PerformancePortalData.svc/WBSCostClasses?$filter=WBSCostSetID eq '2'的Odata调用,但该URI会出现以下错误:

Operator 'eq' incompatible with operand types 'System.Int32' and 'System.String' at position 13.

显然,我需要将此调用看作$filter=WBSCostSetID eq 2,但 如何更改过滤器代码

1 个答案:

答案 0 :(得分:1)

在查看Sencha Documentation之后,我仍然感到茫然。然而,另一个SO post给了我答案的线索。

显然(即使文档中),还有一个type参数,因此我的过滤器代码只需要更改为以下内容(请注意添加的类型: 'INT'):

valueStore.filter([{ property: 'WBSCostSetID', value: 2, type: 'int', exactMatch: true}]);