转自:http://blog.sina.com.cn/s/blog_4d3d00180100rf4l.html
模板模式是设计模式中很重要的一个知识点,在面向对象设计中有着举足轻重的地位。
在Ext中更是发挥的淋漓尽致,为什么这么说呢?Ext中的组件有着很深的继承关系,很多方法都有着重复,而且不仅
是代码上的重复,更多的是流程上的重复
比方说,Ext.Panel吧,将一个Panel显示在浏览器中,其过程叫做render(渲染)。有这么几道工序:
第一、触发”beforeRender”事件
第二、得到这个Panel的父节点(针对DOM来说),即容器,也就是供Panel入住的那个容器
第三、设置rendered=true
第四、调用onRender方法,这步是最重要的,也就是如何将组件显示在浏览器上,涉及到很多流程,一会详解
第五、设置这个panel的css
第六、触发”render”事件,指的是当render完成后,触发的事件
第七、调用aferRender,这步和第四步一样,是很重要的流程之一
第八、看看要不要将这个panel隐藏或者失效,如果用户设置了hidden或者disable
第九、设置这个panel的位置,也就是doLayout,布局
再来,Ext.Panel的子类,Ext.TabPanel,也有这么几道工序:
第一、触发”beforeRender”事件
第二、得到这个Panel的父节点(针对DOM来说),即容器,也就是供Panel入住的那个容器
第三、设置rendered=true
第四、调用onRender方法,这步是最重要的,也就是如何将组件显示在浏览器上,涉及到很多流程,一会详解
第五、设置这个panel的css
第六、触发”render”事件,指的是当render完成后,触发的事件
第七、调用aferRender,这步和第四步一样,是很重要的流程之一
第八、看看要不要将这个panel隐藏或者失效,如果用户设置了hidden或者disable
第九、设置这个panel的位置,也就是doLayout,布局
第十、设置activeTab,也就是激活哪个Tab面板
仅仅多了第十个步骤。
其他例子不举了,都是仅仅在最后几个步骤上不同而已,大家要说了,这个那是什么模板模式,不就是最简单的继承吗?
错了,继承指的是属性和方法的继承,但现在是一个流程,一个系列的工序”继承”,这就是模板模式了。
我们来看,应用了模板模式后的工序
Ext.TabPanel只有2道工序了
第一、完成Panel渲染的工序
第二、设置activeTab,也就是激活哪个Tab面板
Ext.Panel一道工序
第一、完成Ext.Container的渲染工序
Ext.Container有2道工序
第一、完成BoxComponent的渲染工序
第二、设置这个panel的位置,也就是doLayout,布局
Ext.BoxComponent一道工序
第一、完成Ext.Component的渲染工序
Ext.Component八道工序
第一、触发”beforeRender”事件
第二、得到这个Panel的父节点(针对DOM来说),即容器,也就是供Panel入住的那个容器
第三、设置rendered=true
第四、调用onRender方法,这步是最重要的,也就是如何将组件显示在浏览器上,涉及到很多流程,一会详解
第五、设置这个panel的css
第六、触发”render”事件,指的是当render完成后,触发的事件
第七、调用aferRender,这步和第四步一样,是很重要的流程之一
第八、看看要不要将这个panel隐藏或者失效,如果用户设置了hidden或者disable
那么在Ext是如何让这些流程在不同类之间自由跳转的呢?这就是大名鼎鼎的call和apply在起着重要作用了
比如我们来看如下代码
显示代码打印
1 Ext.Panel.superclass.onRender.call(this, ct, position);
什么意思?this就是panel的意思,Ext.Panel.superclass就是Ext.Container,这句代码的意思就是“panel,你给我去执行container里面的onRender方法”
那么在Ext.Container的onRender方法有存在着
显示代码打印
1 Ext.Container.superclass.onRender.call(this, ct, position);
这样的代码,这里的this还是指panel,不懂看上图,这里所有的this统统指panel对象,记住!意思是“panel,你再给我执行container父类里面的onRender方法”
接着又会出现“panel,你再给我执行container父类的父类里面的onRender方法”,一层层递归下去了
转自:http://blog.sina.com.cn/s/blog_4d3d00180100rf4l.html
分享到:
相关推荐
当 `ComboBox` 展开时,监听器中的 `'expand'` 事件会被触发,此时会调用 `Ext.getCmp("qualityAgreeGrid").render("qualityAgreeGrid")`,即根据指定的 `id` 获取对应的组件并进行渲染。 4. **理解必要属性** ...
7. **高性能渲染**:优化了图层的渲染性能,尤其在处理大量数据时,ol-ext能够更有效地显示和更新地图内容,确保地图的流畅性。 8. **兼容性和API**:ol-ext与OpenLayers保持良好的兼容性,开发者可以轻松地将现有...
这意味着该组件将渲染到之前定义的`<div>`元素中。 在组件的定义中,我们可以看到它包含了三个子面板(Tab1、Tab2、Tab3),每个子面板又包含了不同的UI组件,如TextArea、ListView和TreePanel。这种层次化的组件...
三、Render:渲染是Ext 3.0中的一个重要概念,它涉及到组件如何在页面上显示。Renderable是可渲染对象的基础接口,包括所有的组件和布局。Render过程涉及创建DOM元素、应用样式和绑定事件。Ext提供了一系列的...
3. **renderTo** - 指定组件应渲染到哪个DOM元素。如果没有设置,组件会被添加到最近的父容器中。 4. **width** 和 **height** - 设置组件的尺寸。可以是具体的像素值,也可以是百分比。 5. **flex** - 在布局管理...
- 创建EXT容器:定义一个EXT组件,例如一个面板(Panel),作为图表的容器。 - 加载数据:使用XML或JSON数据创建FusionCharts实例,设置图表类型、宽度、高度和数据源。 - 渲染图表:将FusionCharts实例添加到EXT...
**作用:** 指定组件渲染到哪个DOM元素上。 **示例代码:** ```javascript var panel = new Ext.Panel({ title: '基本信息', width: 400, height: 300, renderTo: 'panel-container' }); ``` ##### 2.7 store ...
这里,`render`方法用于将组件渲染到指定的DOM元素中。 #### 使用Ajax ExtJS内置了对Ajax的支持,使得异步数据加载变得非常容易。可以通过`Ext.Ajax.request`方法发起Ajax请求,并处理服务器返回的数据。例如,发送...
例如,`Ext.Component`是所有UI组件的基类,它的`initComponent`方法是初始化组件的关键步骤,而`render`方法负责将组件渲染到页面上。开发者可以通过扩展或配置这些基础类来创建自定义组件。 标签“源码”意味着...
开发者可以引用这些文件到自己的项目中,通过编写JavaScript代码来实例化EXT组件,并配置其属性。例如,创建一个基本的EXT应用可能只需要几行代码,如下: ```javascript Ext.onReady(function() { var panel = ...
`renderTo`属性指定了窗口应渲染到哪个DOM元素上,通常设置为`Ext.getBody()`表示渲染到页面的主体部分。 3. **显示窗口**:最后,调用`show`方法来显示窗口: ```javascript myWindow.show(); ``` 结合以上...
在给定的文件中,`date.html` 可能是包含示例代码或展示如何在网页中使用此控件的HTML文件,`ext-all.js` 是EXT框架的全量版本,包含了所有EXT组件的实现,而`DatePicker.js` 则可能是EXT专门处理日期选择的...
Ext JS 的所有容器组件都支持布局操作,并且每个容器都有一个对应的布局策略,该策略负责管理容器中子元素的排列、组合以及渲染方式。 Ext JS 提供了一个布局基类 `Ext.layout.ContainerLayout`,其他所有布局类型...
Ext Panel是Ext JS框架中的一个核心组件,常用于构建复杂的用户界面,特别是在数据展示和交互方面。本资源“Ext Panel拼揍表格模板.rar”显然包含了关于如何使用Ext Panel创建自定义表格模板的示例和代码。 Ext JS...
EXT JS的Grid组件是实现这一功能的主要组件,它允许开发者以清晰、交互的方式展示复杂的数据结构。以下是对EXT JS双层表格(grid)的知识点详细解析: 1. **EXT JS Grid组件**: EXT JS Grid组件是一个高度可配置...
renderTo: Ext.getBody() }); } }); ``` 在这个例子中,我们首先创建了一个TreeStore,定义了NodeModel模型,并在root中添加了两个子节点。然后,我们创建了一个tree面板,设置了其宽度、高度、存储和渲染位置。...
renderTo: document.body, // 渲染到页面 body value: new Date().getMonth() // 设置当前月份为默认值 }); ``` 通过这样的自定义组件,开发者可以轻松地在Ext2.0环境中实现只选择月份的功能,提升了用户体验。...
通过配置对象,可以定制组件的外观和行为,然后使用renderTo属性将其渲染到指定的DOM元素上。 使用Ajax: EXT内置了Ajax通信模块,提供了简单易用的API进行异步数据交换。例如,使用Ext.Ajax.request()方法可以发起...
renderTo: Ext.getBody() // 渲染到页面 }); ``` 4. **后端数据接口**:后端需要提供一个返回JSON格式数据的接口,如`get-data.php`,该接口应当处理数据库查询并将结果返回给前端的`Store`。 5. **交互与更新*...