`
编程足球
  • 浏览: 257728 次
  • 性别: 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));
}
分享到:
评论

相关推荐

    bitnami-docker-configmap-reload-源码.rar

    【标题】:“bitnami-docker-configmap-reload 源码分析” 【描述】:在 Kubernetes 生态系统中,ConfigMap 和 Secret 是用于管理应用配置的重要资源。然而,当这些资源更新时,运行中的容器可能无法自动感知到变化...

    前端开源库-gulp-server-livereload

    前端开源库-gulp-server-livereloadGulp服务器Livereload,运行本地Web服务器的Gulp插件,通过socket.io启用了Livereload。还附带独立的命令行界面。

    stm32f4 SysTick 精确延时 非中断方式

    SysTick->LOAD = delay_ticks - 1; // 设置计数器负载值 SysTick->VAL = 0; // 清除当前计数值 SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; // 开启SysTick while (SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk...

    Asterisk 代码学习笔记,深入浅出asterisk,asterisk通道,呼叫情景(call scenario)

    - `do_monitor->ast_io_add->sip_do_reload->sip_poke_all_peers->sip_send_all_registers->ast_softhangup_nolock->ast_queue_frame->pthread_testcancel->ast_sched_wait->ast_io_wait`:设置事件监听并等待事件...

    chrome-extension-content-scripts-demo

    安装: Chrome-> Extensions ->启用Developer Mode -> Load unpacked ->选择该项目的根目录。 安装后,现在当您打开任何页面时,将在页面末尾插入一行文本。 为了清楚地看到它,您可以使用投影的test....

    rollup-plugin-livereload:LiveReload您的汇总捆绑包!

    rollup.config.jsimport livereload from 'rollup-plugin-livereload'export default { entry : 'entry.js' , dest : 'bundle.js' , plugins : [ livereload ( ) ] ,} 要使其成为真正的开发服务器,请将此插件与。...

    ExtJs中Store加载(load)时候提示信息

    如果需要刷新Store中的数据并显示加载提示,同样可以在`reload`方法中使用`callback`来控制提示信息的显示与隐藏。例如: ```javascript reportStore.reload({ callback: function (records, options, success) { ...

    stm32延时函数的分析stm32f1

    它有三个关键的寄存器:Control and Status Register (CTRL),Reload Value Register (LOAD) 和 Current Value Register (VAL)。 1. **CTRL寄存器**: - 第16位(COUNTFLAG):当计数器从0递减到负数时,该标志被...

    ext中store.load跟store.reload的区别示例介绍

    在EXT JS的源码中,`store.reload`方法的实现如下: ```javascript reload : function(options){ this.load(Ext.applyIf(options||{}, this.lastOptions)); }, ``` 这里,`Ext.applyIf`函数被用来合并选项对象`...

    VC 下载文件显示进度条.rar

    VC 下载文件显示进度条,pwnd->GetDlgItemText(IDC_EDIT1,szFile);  pwnd->SetDlgItemText(IDC_STAT,"正在校验下载地址...");  fTargFile = netSession.OpenURL(szFile,1,INTERNET_FLAG_TRANSFER_BINARY | ...

    前端开源库-webpack-livereload-plugin

    总的来说,Webpack-Livereload-Plugin是前端开发中不可或缺的一部分,它使得开发者能够专注于编写代码,而无需频繁地手动刷新浏览器,提高了开发效率,提升了开发体验。合理地使用和配置这个插件,可以为你的项目...

    stm32 idwg独立看门狗

    __HAL_IWDG_SET_Reload(hiwdg->Instance, hiwdg->Init.Reload); __HAL_IWDG_SET_Prescaler(hiwdg->Instance, hiwdg->Init.Prescaler); /* Enable the Independent Watchdog */ __HAL_IWDG_ENABLE(hiwdg->...

    shinkansen:Grunt HTML网站生成器。 使用JavaScript构建使用JavaScript的网站

    新干线 ...开发人员环境和静态网站生成器 咕unt声 玉 触控笔/笔尖 凉亭 实时重载 现场棉绒 页面速度优化 受Rails启发,新干线就是Omakase。...开发->人类友好的输出+ livereload public_html->最终优化的输出

    前端开源库-tvml-kit-livereload

    TVML Kit是与之配套的JavaScript框架,它提供了一种方法来解析TVML文档并将其呈现到Apple TV的屏幕上。而TVL(TVML Library)则是一组预定义的TVML模板和组件,可以帮助开发者快速构建美观且响应式的TVOS应用界面。 ...

    chrome-extension-livereload

    LiveReload是一款跨平台的软件,在OS X、Windows以及 Linux 下都能使用。运行 LiveReload 后载入网站源代码所在的文件夹,这样它就会开始识别。而要让 LiveReload自动刷新浏览器,则有两种方法,一种是在页面源代码...

    ember-cli-inject-live-reload:Ember CLI插件,可将实时重载脚本注入HTML内容

    ember-cli-inject-live-reload ember-cli插件,用于将实时重载脚本注入HTML内容。 概述 该插件将注入脚本标签,以将ember-cli-live-reload.js到应用程序html的头部。 ember-cli-live-reload.js是动态生成的,以...

    php多进程框架-模拟java多线程接口simple-fork-php.zip

    支持子进程运行时reload 注意事项 System V 消息队列由于在程序退出时可能存在尚未处理完的数据,所以不会销毁。如果需要销毁,请调用$queue->remove()方法删除队列 共享内存会在...

    vite-plugin-full-reload::recycling_symbol:修改文件后自动重新加载页面

    npm i -D vite-plugin-full-reload # yarn add -D vite-plugin-full-reload 用法 :rocket: 将其添加到vite.config.ts的插件 import { defineConfig } from 'vite' import FullReload from 'vite-plugin-full-reload...

    myeclipse的maven插件

    在MyEclipse中,打开“Window” -> “Preferences” -> “Install/Update” -> “Available Software Sites”。这里列出了可用的软件站点。选择"MyEclipse Update Site",然后点击"Reload"按钮刷新站点列表。之后,...

Global site tag (gtag.js) - Google Analytics