ExtJS4预览:渲染过程重构和标准化

在过去的四年,ExtJs代码库已经进化了,新组件被加进来,编码标准也改进了。在这个过程中,为了重构旧组件有必要经常追溯回去以保证他们也被改进。

在ExtJS4之前渲染组件没有标准的方式。在过去,Panels的展现过程是,首先创建他们需要的元素,并把他们直接添加到dom上,然后获取他们的引用。另一方面,利用按需autoEl DomHelper配置并包装对应的Html标签片段。在页面上表格经常被用作模板来构建他们的标记。

ExtJS4,我们的目标是统一这些方法为一个标准的方法,那就是XTemplate和DomQuery。这个标准允许开发者很容易针对弹性需求构建出强健的组件。这个标准将在所有我们的组件中使用。

引入(介绍)renderTpl、renderData、renderSelector

ExtJS中的所有组件的展现都是基于一个基础的具有唯一ID的具有component类(cls\cmpCls\baseCls\ui)的div元素进行的。如果创建一个组件需要额外的元素,他们现在将被一个XTemplate(tenderTpl)处理。XTemplate的数据将从renderData对象读取,并且生成的元素可以通过组件实例的renderSelectors属性访问。renderSelectors的作用域是基于base div元素并且可以使用标准的css选择器。这些元素引用是组件生命周期的一部分,并且将在组件销毁时被自动移除。下面这个示例将帮助举例说明一个自定义组件的创建:

简单的自定义图标组件示例:

IconComponent = Ext.extend(Ext.Component, {
   iconCls: 'myIcon',
   renderTpl: '<img alt="" src="{blank}" class="{iconCls}"/>',
   onRender: function() {
       Ext.applyIf(this.renderData, {
           blank: Ext.BLANK_IMAGE_URL,
           iconCls: this.iconCls
       });
       Ext.applyIf(this.renderSelectors, {
           iconEl: '.' + this.iconCls
       });
       IconComponent.superclass.onRender.call(this);
   },
   changeIconCls: function(newIconCls) {
 if (this.rendered) {
 this.iconEl.replaceClass(this.iconCls, newIconCls);
       }
 this.iconCls = newIconCls;
   }
});

renderTpl定义一个XTemplate,内嵌"blank"和"iconCls"变量,这两个变量将从renderData获取。另外,在展现的时候一个iconEl引用将被应用到实例对象。一展现出来changeIconCls方法就可以使用iconEl属性了。

评论:在一定程度上表转化了代码的组织和使用,但是还是不够优雅,比如iconEl并没有在属性上定义,下面用的时候有些"勉强",并且不会有提示。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏施炯的IoT开发专栏

《101 Windows Phone 7 Apps》读书笔记-BOOK READER

课程内容 Ø编页 ØList Picker Ø拉伸List Box 控件中的条目     本章的Book Reader应用程序为Jane Austen的经典小...

1856
来自专栏非著名程序员

Attr、Style和Theme详解

? 前言 这三个概念贯穿Android框架的方方面面,是Android程序设计中很重要的一环,理解它们,并能学以致用,不但可以让你的代码变得简洁明了,还可以...

2239
来自专栏用户2442861的专栏

Markdown,你只需要掌握这几个

http://www.cnblogs.com/crazyant007/p/4220066.html

1281
来自专栏hightopo

原 基于 HTML5 WebGL 的 3D

2776
来自专栏前端架构与工程

浅谈事件冒泡

前端开发中不可避免会接触到事件冒泡,今天简单记录一下处理事件冒泡的一点经验,谈不上心得,聊当抛砖引玉。 不谈移动端,以PC浏览器的click事件为例。 事件冒泡...

1839
来自专栏十月梦想

console.log新玩法

console.log支持多样化玩法,这里以console.log的css内容输出为例,也就是console.log()输入多样化内容

1135
来自专栏编程

React 深度编程:受控组件与非受控组件

作者:司徒正美 https://segmentfault.com/a/1190000012458996 受控组件与非受控组件在官网与国内网上的资料都不多,有些人...

2627
来自专栏程序猿

用 Python 向你比个心

之前写了一篇用 Python 画一个小猪佩奇和哆啦 A 梦,然后最近看到有人用 turtle 画了一个心,觉得挺有意思的,于是把代码复制到本地,再加了个播放音乐...

2395
来自专栏Android群英传

onTouchEvent(二) 使用Scroller实现黏性滑动的ScrollView

863
来自专栏CRPER折腾记

Vue 折腾记 - (7) 写一个挺不靠谱的Vue-Echarts组件

上基友社区看了下,发现对echarts的封装都是打包进去的...想想就还是算了.. 图表这货.说实在的,若不是整个系统大量用到,打包进去没必要...

832

扫码关注云+社区

领取腾讯云代金券