![](/img/trans.png)
[英]ExtJS4: Why when I use directFn config in my store I need to specify directCfg.method as directFn's property
[英]ExtJs4 - Store baseParams config property?
在extjs3.x我用商店baseParams
配置屬性來指定用於裝載存儲參數。
extjs 4中不再存在此屬性。我應該怎么做而不是這個?
同樣在extjs3中,我能夠通過使用代理method
配置屬性來指定存儲代理是GET
還是POST
方法。 我應該怎么做而不是這個?
我的ExtJs 3代碼 - >
var store = new Ext.data.JsonStore({
root: 'Data',
baseParams: {
StartDate: '',
EndDate: '''
},//baseParams
proxy: new Ext.data.HttpProxy({
url: 'Time/Timesheet',
method: 'POST'
})//proxy
});//new Ext.data.JsonStore
您需要使用'extraParams'代理屬性來代替Ext 3中的baseParams .ExxtJS 4中的等效JsonStore如下所示:
Ext.define('YourModel', {
extend: 'Ext.data.Model',
fields: ['field1', 'field2']
});
var store = new Ext.data.Store({
model: 'YourModel',
proxy: {
type: 'ajax',
url : 'Time/Timesheet',
root: 'Data',
extraParams: {
StartDate: '',
EndDate: ''
}
}
});
據我所知,HTTP傳輸方法是根據您要完成的內容根據RESTful原則自動設置的。 例如,如果您加載商店,則使用GET請求; 創建新記錄使用POST等。
如果需要,您可以通過覆蓋代理的actionMethods屬性來覆蓋它:
var store = new Ext.data.Store({
model: 'YourModel',
proxy: {
type: 'ajax',
url : 'Time/Timesheet',
root: 'Data',
actionMethods: {
read: 'POST'
},
extraParams: {
StartDate: '',
EndDate: ''
}
}
});
代理額外參數的問題:代理對於使用此代理創建的所有商店來說都很常見! 例:
var countries1, countries2;
countries1 = Ext.create("MyApp.store.Countries");
countries1.getProxy().setExtraParam("countriesId", 1) // add parameter 'countriesId' = 1
countries1.load();
countries2 = Ext.create("MyApp.store.Countries");
countries2.getProxy().setExtraParam("countriesId", 2) // add parameter 'countriesId' = 2
countries2.load({
callback: function(){
countries1.load(); // 'countriesId' is no more 1, but 2 !!!
}
});
我建議您創建自己的商店類,如果要在調用具有相同類型的多個商店的“load”函數之前設置參數,則實現基本參數。
Ext.define("MyStore",{
extend: "Ext.data.Store",
baseParams: null,
/**
* add base parameter to store.baseParams
* @param {Object} key/value object: {key: value}
*/
addBaseParam: function(obj){
Ext.apply(this.baseParams, obj);
},
/**
* add several base parameters to store.baseParams
* @param {Array}: array of key/value object: [{key1: value1, key2: value2,...}]
*/
addBaseParams: function(objects){
var me = this;
if (Ext.isArray(objects)){
Ext.each(objects, function(obj){
me.addBaseParam(obj);
})
} else if (objects){
me.addBaseParam(objects);
}
},
/**
* reset base parameters
*/
resetBaseParams: function(){
this.baseParams = {};
},
/**
* constructor
* @param {object} config
*/
constructor: function(config) {
var me = this;
// manage base params
me.baseParams = me.baseParams || {};
// call parent
me.callParent(arguments);
},
/**
* override load method to add base params to request params
* @param {Object} options
*/
load: function(options){
var me = this;
options = options || {};
options.params = options.params || {};
Ext.applyIf(options.params, me.baseParams);
me.callParent([options]);
}
});
var DataStore = new Ext.data.Store({
model: 'TestItem',
id: 'DataStore',
proxy: {
type: 'ajax',
url : 'db_categoria.php',
actionMethods: {
read: 'POST'
},
extraParams: {
task: 'LISTING',
},
reader: {
root: 'results',
totalProperty: 'total',
id: 'id'
}
}
});
DataStore.load({params: {start: 0, limit: 20}});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.