`

ExtJs源码分析与学习—Ext.UpdateManager

 
阅读更多

     如果想让html页面中任意元素自动局部刷新,而不是整个页面刷新,可以用Ext提供的Ext.UpdateManager来完成其功能,该类还可以实现在线人数统计等功能。下面先看例子

 

//html内容
<div id="refreshContent"></div>

//js内容
var el = Ext.get('refreshContent'); //取得id属性值为'refreshContent'的元素引用
    var updater = el.getUpdateManager(); //创建元素的UpdateManager实例
    updater.disableCaching = true; //关闭内容cache,否则会取cache中的内容,而不会刷新
    updater.showLoadIndicator = true;//加载的时候显示加载信息

    updater.on('beforeupdate', function(el) {
        el.fadeOut(); //淡出
    });

    updater.on('update', function(el, response) {
        el.fadeIn(); //淡入
     var resData = Ext.util.JSON.decode(response.responseText);
        var content = resData.content;
        el.dom.innerHTML = '<b><em>' + content + '</em></b>';
    });
    //每隔5秒刷新一次,从后台取出新的数值,并以json格式返回
updater.startAutoRefresh(5, 'demo1.json', null, null, true);

//json内容
{
    content: '要加载的测试内容'
}

 

      上面的代码运行效果为:每隔15秒,刷新id为refreshContent 的div元素中的值。 这种方式实现了局部淡入淡出的刷新效果,不会导致页面的抖动,因此提供了更好的用户体验。
      该类提供了以下四种方式来改变元素的内容

var updater = Ext.get('refreshContent').getUpdateManager();
updater.update({……});//最基本的更新element的值
updater.formUpdate(formname,url);// 执行表单的异步请求
updater.startAutoRefresh(second,url);// 设置该元素自动刷新。
Element.load({……});//实际上调用了第一种的情况

 下面看其源代码

 

Ext.UpdateManager = Ext.Updater = Ext.extend(Ext.util.Observable,
function() {
    var BEFOREUPDATE = "beforeupdate",
        UPDATE = "update",
        FAILURE = "failure";
    …
    return {
        constructor: function(el, forceNew){
            var me = this;
            el = Ext.get(el);
            if(!forceNew && el.updateManager){
                return el.updateManager;
            }
            me.el = el;
            me.defaultUrl = null;
            me.addEvents(
                BEFOREUPDATE,
                UPDATE,
                FAILURE
            );
            Ext.apply(me, Ext.Updater.defaults);
            me.transaction = null;
            me.refreshDelegate = me.refresh.createDelegate(me);
            me.updateDelegate = me.update.createDelegate(me);
            me.formUpdateDelegate = (me.formUpdate || function(){}).createDelegate(me);
            me.renderer = me.renderer || me.getDefaultRenderer();
            Ext.Updater.superclass.constructor.call(me);
        },
     …
    };
}());

Ext.UpdateManager的别名为Ext.Updater,该类继承了Ext.util.Observable。从代码的实现看,Ext.UpdateManager类中的方法被定义在闭包函数中,通过自执行该函数,返回return中的方法,这样Ext.UpdateManager就拥有了return中定义的属性和方法。在构造器中如果forceNew 设为false并且el中已实例了updateManager,则直接返回

if(!forceNew && el.updateManager){
                return el.updateManager;
    }

 

否则实例化该updateManager

 

下面看其主要属性和方法

 

公共属性

 

  • defaultUrl : String 保存updater上一次更新时使用的url。
  • disableCaching : Boolean是否关闭内容cache,默认不关闭,会取cache中的内容,而不会刷新
  • el : Ext.Element  updater使用的element。
  • formUpdateDelegate : Function 执行表单的异步请求代理
  • indicatorText : String指示器文本(正在加载的时候),默认值为:Ext.Updater.defaults.indicatorText。
  • loadScripts : Boolean输出的时候是不是加载脚本,默认值为:Ext.Updater.defaults.loadScripts。
  • refreshDelegate : Function 用于refresh()内的委托,scope使用this。
  • renderer : Object Updater的内容渲染器(默认值为:Ext.Updater.BasicRenderer)
  • showLoadIndicator : Boolean 是否在加载过程中显示指示器文本,默认值为:Ext.Updater.defaults.showLoadIndicator。
  • sslBlankUrl : String空页面url,用于SSL文件上传。默认值为:Ext.Updater.defaults.sslBlankUrl。
  • timeout : Number请求超时。单位是秒。默认值为:Ext.Updater.defaults.timeout。
  • transaction : Object 当前事务对象,如果没有当前事务则为null。
  • updateDelegate : Function 用于更新(update())的委托。

公共方法:

  •  update(url, params, callback, discardUrl ) 发送一个异步请求,然后根据响应的response更新元素内容。如不指定使用GET,否则POST。
    注意:由于异步请求的一般是远程主机,所以元素不会在此函数返回时更新。要处理返回的数据,请使用回调或事件。请求的options,包含以下选项中的任一项或多项
     url : 请求的url或是能够返回url的函数(默认为最后使用的url)
     method : 默认为get,可设为post
     params : (可选的) 提交的参数,为可url编码的字符串"&param1=1&param2=2",也可以是对象的形式{param1: 1, param2: 2}
     scripts :  loadScripts的简写
     callback : (可选的) callback 事务完成后执行的回调(带参数oElement, bSuccess)
     el : 被更新的Element
     success : True表示成功,false表示失败。
     respone : 进行更新时返回的那个XMLHttpRequest对象
     options : 参数
     scope : 上下文
     discardUrl : (可选的) 默认情况下,完成更新后,最后一次使用的url会保存到defaultUrl属性,该参数为true的话,就不会保存。
     timeout : 超时时间
     text : indicatorText的简写
     nocache : disableCaching的简写


         例子
   

um.update({
        url: "your-url.php",
        params: {param1: "foo", param2: "bar"}, // or a URL encoded string
        callback: yourFunction,
        scope: yourObject, //(optional scope)
        discardUrl: true,
        nocache: true,
        text: "Loading...",
        timeout: 60,
        scripts: false // Save time by avoiding RegExp execution.
    });
  •  
     Ext.Updater.updateElement ( Mixed el, String url, [String/Object params], [Object options] ) : void
    不赞成. 一个静态方法. 反对用此函数取代el.load({url:'foo.php', ...})
    用法:Ext.Updater.updateElement("my-div", "stuff.php");
  •  abort() : void取消当前正在执行的事务。
  •  formUpdate( String/HTMLElement form, [String url], [Boolean reset], [Function callback] ) : void
    执行一个异步form post。用返回的响应数据更新element。如果form有一个属性:enctype="multipart/form-data",它表示这是上传文件,将使用this.sslBlankUrl来阻止IE安全警告。
           参数:
     form : String/HTMLElement form的id或者是element。
     url : String 用于form.action。即提交的网址。
     reset : Boolean是否在更新完后重置表单。
     callback : Function 当事务完毕后执和,它有如下参数:
     el : Ext.Element 正在执行更新的元素
     success : Boolean是否更新成功。
     response : XMLHttpRequest响应结果。
  •  getEl() : Ext.Element获得要更新的元素。
  •  getRenderer() : void取得当前内容渲染器。到Ext.Updater.BasicRenderer.render看更多的细节。
  •  isAutoRefreshing() : void 是否是定时更新。
  •  isUpdating() : Boolean是否处于正在更新中。
  •  refresh( [Function callback] ) : void 用上一次更新的地址(defaultUrl)再次更新一下。如果没有就马上返回。
  •  setDefaultUrl( String/Function defaultUrl ) : void 设置defaultUrl。
  •  setRenderer( Object renderer ) : void设置内容渲染器。
  •  showLoading() : void把元素换成“加载中”的状态,可重写该方法执行自定义的动作。
  •  startAutoRefresh( Number interval, [String/Object/Function url], [String/Object params], [Function callback], [Boolean refreshNow] ) : void 把这个元素设置为自动更新。通过使用stopAutoRefresh来停止自动更新。
  •  stopAutoRefresh() : void   停止自动更新。

 公共事件:

  • beforeupdate : ( Ext.Element el, String/Object/Function url, String/Object params )在更新之前触发。
  • failure : ( Ext.Element el, Object oResponseObject )更新失败时触发。
  • update : ( Ext.Element el, Object oResponseObject ) 更新成功时触发。

    以上为该类的主要属性、方法和事件,ext组件中LoadMask.js用到了Ext.UpdateManager来实现遮罩提示信息的效果。

分享到:
评论

相关推荐

    使用Ext.UpdateManager实现页面任意部分自动刷新处理

    ### 使用Ext.UpdateManager实现页面任意部分自动刷新处理 在现代Web开发中,为了提供更加流畅、实时的用户体验,页面的部分内容或组件需要定时更新。这种更新通常涉及到与服务器的交互,以便获取最新的数据并将其...

    extjs-Ext.ux.form.LovCombo下拉框

    这些文件可以帮助开发者理解并应用`Ext.ux.form.LovCombo`,通过查看源码学习如何初始化、配置以及处理相关事件。 综上所述,`Ext.ux.form.LovCombo`是EXTJS中用于创建具有多选功能和良好浏览器兼容性的下拉框组件...

    extjs中Ext.Panel和TreePanel 组件动态加载本地页面数据

    在EXTJS这个强大的JavaScript框架中,`Ext.Panel`和`TreePanel`是两个非常重要的组件,它们被广泛用于构建复杂的用户界面。这篇文章将探讨如何在这些组件中动态加载本地页面数据,以提升用户体验并实现灵活的数据...

    extJs 2.1学习笔记

    目录 1. ExtJs 结构树 2 2. 对ExtJs的态度 3 3. Ext.form概述 4 4. Ext.TabPanel篇 5 5. Function扩展篇 7 6. Ext.data.Store篇 10 7. Ext.data.JsonReader篇一 12 ...28. extJs 2.0学习笔记(ext.js篇) 77

    ExtJS 4.0 改善Ext.grid.plugin.RowEditing (重构,v1.4版本,2011-09-11)

    总的来说,ExtJS 4.0中对RowEditing插件的重构旨在提供更高效、易用且可靠的表格数据编辑功能,同时通过源码分析和文档学习,开发者可以更好地利用这个插件来提升其应用程序的用户体验。尽管具体的改进内容需要通过...

    ExtJs选中var editor = new Ext.ux.grid.RowEditor详解

    ### ExtJs选中 `var editor = new Ext.ux.grid.RowEditor` 详解 在Web开发领域,特别是使用ExtJs框架进行复杂用户界面构建时,`RowEditor` 是一个非常实用的功能,它允许用户直接在表格行内编辑数据,极大地提高了...

    ExtJs4.0 使用心得@1 Ext.util.Format.Number()

    此外,`Ext.util.Format`还包括其他与数字相关的函数,如`numberRenderer`,它可以创建一个返回格式化数字的函数,便于在模板或配置中重用。`numberRound`则用于四舍五入数字到指定的小数位数。 总的来说,`Ext....

    ExtJS源码分析与开发实例宝典4.pdf

    这个是《ExtJS源码分析与开发实例宝典》高清版本,是本人花钱买来的,所以分享给大家,希望大家喜欢,由于本人一次只能上传60M大的文件(试了好多次,每次都上传到99%就不动了,还以为csdn在后台审核内容呢,害我电脑...

    ExtJS源码分析与开发实例宝典2.pdf

    这个是《ExtJS源码分析与开发实例宝典》高清版本,是本人花钱买来的,所以分享给大家,希望大家喜欢,由于本人一次只能上传60M大的文件(试了好多次,每次都上传到99%就不动了,还以为csdn在后台审核内容呢,害我电脑...

    ExtJS源码分析与开发实例宝典0.pdf

    这个是《ExtJS源码分析与开发实例宝典》高清版本,是本人花钱买来的,所以分享给大家,希望大家喜欢,由于本人一次只能上传60M大的文件(试了好多次,每次都上传到99%就不动了,还以为csdn在后台审核内容呢,害我电脑...

    ExtJS源码分析与开发实例宝典1.pdf

    这个是《ExtJS源码分析与开发实例宝典》高清版本,是本人花钱买来的,所以分享给大家,希望大家喜欢,由于本人一次只能上传60M大的文件(试了好多次,每次都上传到99%就不动了,还以为csdn在后台审核内容呢,害我电脑...

    ExtJS-3.4.0系列:Ext.TabPanel

    在本文中,我们将深入探讨ExtJS中的`Ext.TabPanel`组件,它是创建多标签界面的核心元素。`Ext.TabPanel`允许开发者在单个容器中组织多个面板或视图,每个面板都有自己的标题,并且可以通过标签页进行切换。让我们...

    extjs 可编辑的表格树 Ext.tree.ColumnTree Ext.tree.ColumnTreeEditor

    extjs 可编辑的表格树,每个单元格自定义编辑组件,可以自适应列宽,只有源码与例子,运行实例要修改路径,不然图片不能显示,注意etree.jsp的js引入路径 支持Ext2.x以上版本 如运行不了EmailTo : codeme9@gmail....

    extjs4的Ext.frorm.Panel控件属性说明和表单控件说明

    主要用例子说明extjs4的form表单的运用,其中有表单属性说明,表单控件运用说明如: title:'表单', //表单标题 bodyStyle:'padding:5 5 5 5', //表单边距 height:120, //表单高度 width:200, //表单宽度 ...

    ExtJs 带清空功能的日期组件

    在ExtJs框架中,日期组件(DateField)是用于用户输入日期的常见控件。然而,标准的ExtJs DateField并未内置清空日期的功能,这可能会在某些应用场景中造成不便。为了解决这个问题,我们需要自定义一个扩展,为日期...

    Ext.Ajax.request2.x实现同步请求

    在EXTJS库中,`Ext.Ajax.request`是用于发送Ajax请求的核心方法,它支持异步和同步操作。本文将详细解析如何利用`Ext.Ajax.request`实现同步请求,并探讨其背后的原理和注意事项。 首先,我们需要理解Ajax的本质,...

    ExtJs学习资料28-Ext.data.JsonStore数据存储器.doc

    document.write("&lt;script type=\"text/javascript\" src=\"../extjs/adapter/ext/ext-base.js\"&gt;&lt;/script&gt;"); document.write("&lt;script type=\"text/javascript\" src=\"../extjs/ext-all.js\"&gt;&lt;/script&gt;"); ...

    ExtJS 3.4.0中的 ext.jsb2 文件

    在3.4.0版本中,`ext.jsb2` 文件是一个关键组成部分,它对于理解和开发基于ExtJS的应用程序至关重要。这个文件的缺失可能会对升级到4.0.0版本的开发者造成困扰,因为4.0.0版本不再包含这个文件,但幸运的是,它可以...

    ExtJs的Ext.Ajax.request实现waitMsg等待提示效果

    首先,ExtJs中的Ext.MessageBox是一个常用来与用户进行交互的弹窗组件。它可以用来显示警告框、确认框等。在进行Ajax请求之前,我们可以使用Ext.MessageBox确认框来询问用户是否要进行操作,并在用户确认后显示一个...

    extjs实例 入门,提供ext所需要的资源文件,详细叙述怎么改变文件颜色

    本实例将帮助初学者了解如何使用ExtJS入门,并通过提供的资源文件学习如何改变文件的颜色。 首先,我们要明白在ExtJS中改变文件颜色主要涉及到CSS样式和组件的配置。ExtJS的组件如按钮、表格、面板等都可以通过CSS...

Global site tag (gtag.js) - Google Analytics