[color=red]1. load()的源码[/color]
[color=red]2. 关于storeOptions的实现[/color]
[color=red]2. execute()的实现[/color]
[color=red]5.reload()的实现[/color]
// 加载Store的数据
load : function(options) {
//1. 自定义的参数
options = Ext.apply({}, options);
//2.删除对象中的callback 和 scope属性,并且保存本次查询的参数
this.storeOptions(options);
//3. 如果是远程排序,则需要设置(服务器端排序)
if(this.sortInfo && this.remoteSort){
var pn = this.paramNames;
options.params = Ext.apply({}, options.params);
options.params[pn.sort] = this.sortInfo.field;
options.params[pn.dir] = this.sortInfo.direction;
}
try {
//4. 发起查询
return this.execute('read', null, options);
} catch(e) {
this.handleException(e);
return false;
}
}
[color=red]2. 关于storeOptions的实现[/color]
// 删除对象中的 callback 和 scope 属性
storeOptions : function(o){
o = Ext.apply({}, o);
delete o.callback;
delete o.scope;
// 保存本次查询的参数
this.lastOptions = o;
}
[color=red]2. execute()的实现[/color]
/**
* 执行步奏:
* 1. 查询执行的动作是否正确
* 2. 内部参数的整合
* 3. 未知
* 4. 部分数据初始化
* 4.1 是read Action 调用beforeload和添加baseParams
* 4.2 其他create,update,destroy动作,未知
* 5. 如果需要,则发起请求
* @param action{Object} 动作类型
* @param rs{Object} 未知
* @param options{Object} 传递的参数
* @return 是否有发起查询{true/false} 如果有发起查询,则是true
*/
execute : function(action, rs, options, batch) {
//1. 判断该请求是否正确 主要有:create,read,update,destroy 这四个动作
if (!Ext.data.Api.isAction(action)) {
throw new Ext.data.Api.Error('execute', action);
}
//2. 整理参数如果options为空则使用params: {} 空参数
options = Ext.applyIf(options||{}, {
params: {}
});
//3. 未知
if(batch !== undefined){
this.addToBatch(batch);
}
var doRequest = true;
//4. 部分数据初始化
//4.1 是read Action 调用beforeload和添加baseParams
//一. 先调用beforeload,同时传递对应的参数
//二. 添加基本参数信息
if (action === 'read') {
doRequest = this.fireEvent('beforeload', this, options);
Ext.applyIf(options.params, this.baseParams);
}
else {
//4.2 其他create,update,destroy动作,未知
if (this.writer.listful === true && this.restful !== true) {
rs = (Ext.isArray(rs)) ? rs : [rs];
}
else if (Ext.isArray(rs) && rs.length == 1) {
rs = rs.shift();
}
if ((doRequest = this.fireEvent('beforewrite',
this, action, rs, options)) !== false) {
this.writer.apply(options.params, this.baseParams, action, rs);
}
}
// 是否要发起请求
if (doRequest !== false) {
//如果是writer,后续补充
if (this.writer && this.proxy.url && !this.proxy.restful &&
!Ext.data.Api.hasUniqueUrl(this.proxy, action)) {
options.params.xaction = action;
}
// 发起一个Ajax请求
this.proxy.request(Ext.data.Api.actions[action], rs, options.params,
this.reader, this.createCallback(action, rs, batch), this, options);
}
return doRequest;
}
[color=red]5.reload()的实现[/color]
// reload就是使用上次传递的参数重新调用reload但是不包括baseParams
reload : function(options){
this.load(Ext.applyIf(options||{}, this.lastOptions));
}