`
编程足球
  • 浏览: 250772 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

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

    博客分类:
  • Ext
 
阅读更多
1. load()的源码
// 加载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;
	}
}


2. 关于storeOptions的实现
// 删除对象中的	callback 和 scope 属性
storeOptions : function(o){
	o = Ext.apply({}, o);
	delete o.callback;
	delete o.scope;
        // 保存本次查询的参数
	this.lastOptions = o;
}



2. execute()的实现

/** 
 * 执行步奏:
 * 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;
    }



5.reload()的实现
	
// reload就是使用上次传递的参数重新调用reload但是不包括baseParams
reload : function(options){
    this.load(Ext.applyIf(options||{}, this.lastOptions));
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics