ExtJS存储筛选器未完全发送
我有一个与远程数据库模型同步的商店。我需要应用远程过滤。问题是,如果我在配置选项中设置了一个过滤器,过滤器将被发送(加载或同步),但不是完全发送。 存储:ExtJS存储筛选器未完全发送,extjs,filter,proxy,store,Extjs,Filter,Proxy,Store,我有一个与远程数据库模型同步的商店。我需要应用远程过滤。问题是,如果我在配置选项中设置了一个过滤器,过滤器将被发送(加载或同步),但不是完全发送。 存储: var RegularItemsStore=Ext.create("appMain.Store.UniversalStore",{ model: 'OrderModel', modelName:'Order2', autoSync: true, filters: [{ "property" :
var RegularItemsStore=Ext.create("appMain.Store.UniversalStore",{
model: 'OrderModel',
modelName:'Order2',
autoSync: true,
filters: [{ "property" : "storeId", "value": 0 , "type": "numeric", "operator": "="},
});
Query String Parameters
r:backend/index
Table:Order2
log:0
...
filter:[{"property":"storeId","value":0}]
this.proxy =
{
url: "index.php?r=backend/index&Table=" + this.modelName + this.params,
reader: {
root: "result.data",
totalProperty: "result.count",
type: "json",
metaProperty: 'myMetaData', // config for metaData:
},
actionMethods: {
read: 'GET', update: 'POST'
},
...
};
Ext.each(ItemStoreArray, function(store){
var filter = [ { property: 'contractorId', value: ContractorSelectedId , operator: '=', type: 'numeric' }, { property: 'userId', value: UserId , operator: '=', type: 'numeric' }];
store.getProxy().setExtraParam('filter' , Ext.JSON.encode(filter) );
store.load(); //console.dir(store);
});
在Http ajax请求中,此筛选器仅通过属性传递:“”:“storeId”,“value”:0
,“type”:“numeric”,“operator”:“=”
;在web开发工具中:
var RegularItemsStore=Ext.create("appMain.Store.UniversalStore",{
model: 'OrderModel',
modelName:'Order2',
autoSync: true,
filters: [{ "property" : "storeId", "value": 0 , "type": "numeric", "operator": "="},
});
Query String Parameters
r:backend/index
Table:Order2
log:0
...
filter:[{"property":"storeId","value":0}]
this.proxy =
{
url: "index.php?r=backend/index&Table=" + this.modelName + this.params,
reader: {
root: "result.data",
totalProperty: "result.count",
type: "json",
metaProperty: 'myMetaData', // config for metaData:
},
actionMethods: {
read: 'GET', update: 'POST'
},
...
};
Ext.each(ItemStoreArray, function(store){
var filter = [ { property: 'contractorId', value: ContractorSelectedId , operator: '=', type: 'numeric' }, { property: 'userId', value: UserId , operator: '=', type: 'numeric' }];
store.getProxy().setExtraParam('filter' , Ext.JSON.encode(filter) );
store.load(); //console.dir(store);
});
而如果我在与store相关的代理上设置了filter,则该筛选器会原封不动地(以正确的方式)传递到服务器:
代理配置:
var RegularItemsStore=Ext.create("appMain.Store.UniversalStore",{
model: 'OrderModel',
modelName:'Order2',
autoSync: true,
filters: [{ "property" : "storeId", "value": 0 , "type": "numeric", "operator": "="},
});
Query String Parameters
r:backend/index
Table:Order2
log:0
...
filter:[{"property":"storeId","value":0}]
this.proxy =
{
url: "index.php?r=backend/index&Table=" + this.modelName + this.params,
reader: {
root: "result.data",
totalProperty: "result.count",
type: "json",
metaProperty: 'myMetaData', // config for metaData:
},
actionMethods: {
read: 'GET', update: 'POST'
},
...
};
Ext.each(ItemStoreArray, function(store){
var filter = [ { property: 'contractorId', value: ContractorSelectedId , operator: '=', type: 'numeric' }, { property: 'userId', value: UserId , operator: '=', type: 'numeric' }];
store.getProxy().setExtraParam('filter' , Ext.JSON.encode(filter) );
store.load(); //console.dir(store);
});
和应用过滤器:
var RegularItemsStore=Ext.create("appMain.Store.UniversalStore",{
model: 'OrderModel',
modelName:'Order2',
autoSync: true,
filters: [{ "property" : "storeId", "value": 0 , "type": "numeric", "operator": "="},
});
Query String Parameters
r:backend/index
Table:Order2
log:0
...
filter:[{"property":"storeId","value":0}]
this.proxy =
{
url: "index.php?r=backend/index&Table=" + this.modelName + this.params,
reader: {
root: "result.data",
totalProperty: "result.count",
type: "json",
metaProperty: 'myMetaData', // config for metaData:
},
actionMethods: {
read: 'GET', update: 'POST'
},
...
};
Ext.each(ItemStoreArray, function(store){
var filter = [ { property: 'contractorId', value: ContractorSelectedId , operator: '=', type: 'numeric' }, { property: 'userId', value: UserId , operator: '=', type: 'numeric' }];
store.getProxy().setExtraParam('filter' , Ext.JSON.encode(filter) );
store.load(); //console.dir(store);
});
如何解决?我应该在store init中的代理上设置一个永久过滤器吗?如何设置
更新
按照Alexander的建议,我已覆盖解决该问题的代理配置参数:
encodeFilters: function(filters) {
var min = [],
length = filters.length,
i = 0;
for (; i < length; i++) {
min[i] = {
property: filters[i].property,
value : filters[i].value,
operator : filters[i].operator, // added
type : filters[i].type, // added
};
}
return this.applyEncoding(min);
},
encodeFilters:函数(过滤器){
var min=[],
长度=过滤器长度,
i=0;
对于(;i
您可以覆盖所用代理中的encodeFilters:function(filters)
对于默认实现,请查看src/data/proxy/Server.js。我可以问一下,这个文件可能位于哪里;我搜索了文件夹,但什么也没找到……这是我的extjs目录的快照:它在Ext源代码中,你可以从他们的网站下载。我不知道它在你的硬盘上的什么地方,但他们甚至在网上有它: