`
sp42
  • 浏览: 148757 次
  • 来自: Canton
文章分类
社区版块
存档分类
最新评论

EXT设计模式初学习

阅读更多
EXT设计模式初学习
其实..是一篇jack博客上的译文,见笑了。
www.jackslocum.com/blog/2006/11/06/rambling-at-400am-design-patterns-in-javascript-jquery-style-selectors-zebra-stripes/

Rambling at 4:08am: Design patterns in JavaScript, jQuery Style Selectors, Zebra Stripes
November 6, 2006 by Jack Slocum
--------------------------------------------------------------------------------

jQuery blog 上最近有一篇帖子,是关于在不同的JS库中,怎么做出斑马纹的间隔效果的表格,文章是Zebra Table Showdown 。文章旨在(我希望)告诉大家做出这个效果,jQuery相比其它冗长的library/toolkit是怎么得简单法。阅读他的文章后,虽然某些程度上我不是太同意其所提出的观点,但是我必须承认John Resig 提出的是一个非常好的想法。jQuery's 所使用的CSS选择符+collection 对象真是非常地方便。我发表了一段代码的样本和为什么要提交jQuery的一个BUG的评论。遗憾地我的评论(这里本来有删除线)没有(这里本来有删除线)了。反正,我想说的是...

YAHOO.ext.Element
Yui-ext 库有和jQ核心对象相类似的对象:YAHOO.ext.Element(元素对象)。元素对象和jQ核心对象有一些相似的功能如简易动画控制和快速存储访问 (convenient accessor methods),但是JQ对象可以一组一组地控制对象 - 不限于单个。(在元素的defense,jQuery实现的功能还不多) 。

Composite
熟悉设计模式的读者我想必听过Composite模式。若没有,不妨去连接看看(或者还有其它关于模式可读的内容)。简言之,Composite模式可通过暴露一个接口来接触一组的对象,并像单个对象那样操控对象。在yui-ext中这样的Composite 模式已经应用于CompositeSequence类进行动画控制。它允许你控制一连串的动画就好像控制单个动画对象那样。总之, Composite 模式是实现一组YAHOO.ext.Elements的最佳选择。

Flyweight
试想一下你选取了500个元素,就要new五百次的YAHOO.ext.Element 对象。对于此类问题,还有其它解决之道,叫做 Flyweight模式。 Flyweight模式使得在一个实例上,根据上下文内容共享/插入其成员。利用这个方法,我可以让单个YAHOO.ext.Element对象选取多个活动的DOM节点,以提升性能。

看你怎么选
最后,我列举三个不同的实现,每个都有其自身的优点。
1. Flyweights:默认使用的模式是Flyweight模式,很轻盈、很快。你操作一堆的元素却不蹒跚,步履轻盈。
2. 第二个实现是“unique”version, collection 集合中每个元素都有其自己的YAHOO.ext.Element 对象。当你想在某个集合之外引用元素对象,该版本就很有用了。Fflyweight version要这样就不可能了因为元素操作的DOM节点是不断变化的。 尽管在测试中我没有发现和flyweight版本显著的区别,不过我还是在大量节点的情况下不要使用“unique”version。
3.第三方的实现。这是到现在最有趣的东东了-YAHOO.ext.Actor/Animator 。它允许你可以将一堆元素当作单个元素使用,并有同步或次序的动画效果(synchronized and/or sequenced animations.)。我想jQuery也可以做得不错尤其你能够以一行代码完成惊人得效果出来。

选择符的处理Selector Processing
怎么通过CSS选择符选取元素是重要的一环。有关的方案已经有相应的函数而且已做得比较满意了的,我不想重复造轮子,所以我决定把选择符的处理再稍微改动,实现一个可配置的函数。个人而言,比较倾向Dean Edwards的 cssQuery ,看来也正好适合。当然我们也不能忘记 Simon Willison的早期版本 getElementsBySelector ,可以作为备选项。如果你在yui-ext.js之前包含(include)了它们,yui-ext.js会自动引用。如果以上两个都不是你的心水选择,你也可以这样设置一下selectorFunction 属性:

YAHOO.ext.Element.selectorFunction = $$; // 或是其它


这里有简写方式和长写方式, 就像 getEl()(译注:EXT为Ext.get(argment))和YAHOO.ext.Element.get()。简短的是...只是加多一个s...getEls() 和完整的是YAHOO.ext.Element.select()。 至于动画版本是,getActors() 和YAHOO.ext.Animator.select()。

我那个(这里本来有删除线)不见的(这里本来有删除线) 评论
至于 Zebra Table Showdown的回应,我提交了:
getEls("tr:nth-child(odd)").addClass('odd');

测试页面: http://www.jackslocum.com/playpen/selectors/
按照W3C规范,我想说说jQuery 跳行实际上跳错了,看下图:

[img] http://www.jackslocum.com/blog/images/zebra.gif[/img]
jQuery 跳过的是偶数行非奇数行。按照 CSS Spec 的nth-child定义,“The index of the first child of an element is 1”不是0。
这不是什么大问题(也好解决),但是有意思的是,要一心证明jQuery是最好的( better than the world),却给别人挑出了这么一个bug,-有趣。现在是凌晨四点了,我太累了,没事找点乐而已啦。 
相互学习
jQuery最大的优点是易用。 jQuery可以一行代码搞掂很多问题。 YUI最大的优点是它被设计为面向对象的(object oriented)和组件的架构(component architecture)。要我说哪个库好一些,那倒不如在jQuery和YUI(或其它的)之间相互学习。如果能够结合jQuery的易用和YUI的组件,我想真正的“new wave (of) Javascript” 那天便会到来。
我会在明天放一些新的例子,到时,你可以右上角的地方下载来玩玩。
分享到:
评论
1 楼 庄严 2007-09-17  
jquery最简单,ext功能最强大,不过jquery也有很多扩展插件可以用。
现在JS框架太多了,只能都看看,相互学习,选择最适合自己的。最近论坛里有个大哥强烈推荐的mootools我还没看过,有机会我会看的。

相关推荐

    Ext界面生成器,功能强大

    例如,它可能会提供一些常见的UI设计模式,如数据绑定、分页、排序等功能的实现。通过这些预设的模板,开发者可以学习到如何在Ext应用中有效地组织和管理代码。 总之,Ext界面生成器是Ext开发者的得力助手,它将...

    快意编程 EXT JS Web开发技术详解.pdf

    通过《快意编程:Ext JS Web开发技术详解》的学习,读者可以了解到Ext JS的使用方法,熟练掌握如何运用这些技术来帮助前台界面设计人员进行开发。为了帮助众多初学者快速掌握Ext JS的开发方法,笔者精心编著了《快意...

    初涉USB,初学者USB入门总结

    设备被分配一个唯一的地址,之后主机请求设备配置信息,以了解设备的工作模式和特性。如果设备需要提供更详细的信息,如产品名称,还需要上传字符串描述符。对于像鼠标和键盘这样的HID(Human Interface Device)...

    accp5.0 s1 九月份毕业笔试题

    - 设计模式:常见的设计模式如工厂模式、单例模式、装饰器模式等及其应用。 - 版本控制:Git或SVN的基本操作,分支管理,代码合并等。 4. **数据库基础**: - SQL语言:SELECT查询、INSERT插入、UPDATE更新、...

    Linux0.99版源代码

    通过研究Linux 0.99的源代码,不仅可以学习到早期Linux的设计思想和实现技术,还能了解到开源软件开发的历史和文化。对于系统程序员、内核开发者以及对计算机系统有深厚兴趣的人来说,这是一个难得的学习机会。同时...

    关于计算机实习报告.pdf

    7. **开发环境与技术组合**:实习项目中使用了Eclipse作为开发工具,Oracle作为数据库,前端采用Ext框架,后端使用Hibernate和Spring,采用MVC模式。项目的包结构清晰,遵循一定的组织原则,便于维护和扩展。 8. **...

    CSR公司BC4系列 键盘应用源程序代码

    CSR公司的BC4系列是专为蓝牙低功耗(Bluetooth Low Energy, BLE)设备设计的一系列芯片,主要用于无线连接和数据传输。在这个特定的资源中,我们聚焦于键盘应用的源程序代码,这将帮助开发者理解和实现CSR BC4系列...

    linux0.12:学习原始的身体舒服

    学习Linux 0.12 对于理解早期开源操作系统的设计思想和技术实现具有重要意义。 在Linux 0.12中,我们能学到的知识点包括: 1. **内核架构**:Linux 0.12 内核采用了微内核设计,虽然与现代Linux内核的宏内核架构...

    工控机通用检修流程

    工控机,全称工业控制计算机,是专为工业环境设计的一种高性能、高可靠性的计算机。在现代化生产线上,工控机起着监控、数据采集和控制设备运行的关键作用。本资料“工控机通用检修流程”是针对工控机出现故障时的...

    Linux网络编程 Linux网络编程.TXT

    - **客户机/服务器模型**:描述了网络通信的基本模式,其中客户机发起请求,服务器响应请求。 #### 二、Unix/Linux发展历史与系统特性 - **Unix早期发展**:始于1970年代初的AT&T贝尔实验室,由Ken Thompson和...

    Video4Linux API V2.0

    ### Video4Linux API V2.0 知识点解析 #### 一、概述 Video4Linux(V4L)是Linux系统中用于处理视频输入的一种应用...对于希望深入学习V4L2 API的开发者来说,理解其核心概念、命令及其背后的设计思路是非常重要的。

    后端开发关键的后端开发技巧和常用的总结概要.docx

    ### 后端开发关键技巧与...持续学习新技术、新工具,不断优化现有的解决方案,是每位后端开发者提升自身能力和适应行业发展的重要途径。希望本文提供的指南能够帮助读者在实际工作中少走弯路,提高开发效率和代码质量。

    Linux内核剖析

    Linux的历史始于20世纪90年代初,由Linus Torvalds开发,起源于他对MINIX系统的改进,最终发展成为全球开发者共同维护的庞大项目。Linux的成功部分归功于采用了GPL许可证,这确保了其开源性和社区驱动的开发模式。 ...

Global site tag (gtag.js) - Google Analytics