我有一个很棒的模特和商店。我可以从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
,但 如何更改过滤器代码 ?
答案 0 :(得分:1)
在查看Sencha Documentation之后,我仍然感到茫然。然而,另一个SO post给了我答案的线索。
显然(即使文档中不),还有一个type
参数,因此我的过滤器代码只需要更改为以下内容(请注意添加的类型: 'INT'强>):
valueStore.filter([{ property: 'WBSCostSetID', value: 2, type: 'int', exactMatch: true}]);