Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ExtJS存储筛选器未完全发送_Extjs_Filter_Proxy_Store - Fatal编程技术网

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源代码中,你可以从他们的网站下载。我不知道它在你的硬盘上的什么地方,但他们甚至在网上有它: