2014-09-04 53 views
2

我有一個商店與遠程數據庫模型syncronized。我需要應用遠程過濾。問題是,如果我在配置選項中設置了過濾器,則過濾器正在發送(加載或同步時),但不完全。 商店ExtJS商店過濾器發送不完整

var RegularItemsStore=Ext.create("appMain.Store.UniversalStore",{ 
    model: 'OrderModel', 
    modelName:'Order2', 
    autoSync: true, 
    filters: [{ "property" : "storeId", "value": 0 , "type": "numeric", "operator": "="}, 
}); 

HTTP中ajax請求這個濾鏡ONLY"property" : "storeId", "value": 0,該"type": "numeric", "operator": "="錯過通過;在web開發工具

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中爲代理設置一個永久過濾器,怎麼樣?

更新

由於跟隨亞歷山大的建議,我已經重寫是解決這一問題的代理服務器的配置參數:

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); 
}, 

回答

3

您可以覆蓋你使用的代理encodeFilters: function(filters)

對於默認實現,請看src/data/proxy/Server.js。

+0

我可以問你,哪裏可能有這個文件的位置;我搜索的文件夾,並沒有發現什麼......這是我的extjs目錄的鏡頭:https://drive.google.com/file/d/0B2NIZgbwy5TmQzloVGVueDhmRmM/edit?usp=sharing – 2014-09-04 11:31:29

+0

它是在Ext源代碼代碼,你可以從他們的網站下載。我不知道它在硬盤上的位置,但它們甚至在網絡上:http://docs.sencha.com/extjs/4.2.2/source/Server.html#Ext-data-proxy- Server-method-encodeFilters – Alexander 2014-09-04 11:34:42

+1

我發現並完成了它。謝謝。 – 2014-09-04 11:50:51