Ext3.4源码之Store -> load() 与reload()

[color=red]1. load()的源码[/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));
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值