ExtJs4 - 存储 baseParams 配置属性?
Posted
技术标签:
【中文标题】ExtJs4 - 存储 baseParams 配置属性?【英文标题】:ExtJs4 - Store baseParams config property? 【发布时间】:2011-08-28 23:47:18 【问题描述】:在 extjs3.x 中,我使用了 stores 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
【问题讨论】:
“我应该做什么来代替这个?”寻找新的框架。让我难以置信的是,Sencha 如此巨大地改变了从 ExtJS 3 到 4 的东西 @George:是的,这是一个很大的变化。上个月我一直在迁移我的项目。就快到了。我认为一旦完全迁移,这些好处就会得到回报。你有问题吗? 【参考方案1】:您需要使用“extraParams”代理属性代替 Ext 3 中的 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: ''
);
【讨论】:
感谢您的回复。我可以从 API 中看到关于 HTTP 传输方法的自动设置。我需要一种方法来覆盖它,因为我想使用 POST 请求来加载我的商店,因为 GET 请求的长度受到限制。有任何想法吗?再次感谢。 @shane87 是的,对文档进行了一些挖掘,看起来有一种方法可以覆盖它。我已经更新了答案。【参考方案2】:代理额外参数的问题:代理对于使用此代理创建的所有商店都是通用的! 示例:
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]);
);
【讨论】:
【参考方案3】: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);
【讨论】:
以上是关于ExtJs4 - 存储 baseParams 配置属性?的主要内容,如果未能解决你的问题,请参考以下文章