Javascript ExtJs4-存储baseParams配置属性?
在extjs3.x中,我使用storesJavascript ExtJs4-存储baseParams配置属性?,javascript,extjs,store,params,extjs4,Javascript,Extjs,Store,Params,Extjs4,在extjs3.x中,我使用storesbaseParamsconfig属性指定用于加载存储的参数。 extjs 4中不再存在此属性。我应该做什么来代替这个 在extjs3中,我还可以通过使用proxy方法配置属性指定stores代理是GET还是POST方法。我应该做什么来代替这个 我的ExtJS3代码-> var store = new Ext.data.JsonStore({ root: 'Data', baseParams: {
baseParams
config属性指定用于加载存储的参数。extjs 4中不再存在此属性。我应该做什么来代替这个
在extjs3中,我还可以通过使用proxy
方法
配置属性指定stores代理是GET
还是POST
方法。我应该做什么来代替这个
我的ExtJS3代码->
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”代理属性代替Ext3中的baseParams属性。ExtJS 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: ''
}
}
});
代理额外参数的问题:代理对于使用此代理创建的所有存储都是通用的! 例如: 我建议您创建自己的store类,如果您想在使用多个相同类型的存储调用“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]);
}
});
谢谢你的回复。我可以从API中看到HTTP传输方法的自动设置。我需要一种方法来覆盖它,因为我想使用POST请求加载我的存储,因为GET请求的长度受到限制。有什么想法吗?再次感谢。@shane87是的,对文档做了一些挖掘,看起来有办法覆盖它。我已经更新了答案。“我应该做什么来代替这个?”找到一个新的框架。让我难以置信的是,Sencha如此戏剧性地改变了从ExtJS 3到ExtJS 3的一切4@George:是的,这是一个很大的变化。上个月我一直在迁移我的项目。快到了。我认为一旦完全迁移,这些好处就会得到回报。你有问题吗?
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 !!!
}
});
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]);
}
});