- 浏览: 145257 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
houfeng0923:
zensh 写道这种Promise用起来还是复杂了点,需要大量 ...
使用jQuery Deferred 和 Promise 创建响应式应用程序 -
zensh:
这种Promise用起来还是复杂了点,需要大量处理异步任务的同 ...
使用jQuery Deferred 和 Promise 创建响应式应用程序 -
Troland:
houfeng0923 写道Troland 写道
functi ...
JavaScript设计模式摘要(一) -
houfeng0923:
Troland 写道
function extend(subc ...
JavaScript设计模式摘要(一) -
Troland:
function extend(subclass,super ...
JavaScript设计模式摘要(一)
1,YUI3组件框架
组件框架基于YUI Core,是建立和扩展组件的基础;组件框架从下而上依次基于attribute、base、widget 模块组成,同时基于plugin模块实现灵活扩展。
相关类说明:
Attribute类 提供属性管理,可以扩展任何类使之具备属性管理功能,如提供get/set接口和change事件。
Base类 提供属性管理和基础的事件机制,同时提供声明周期管理和插件机制。
Widget类 派生自Base,为可视化对象提供通用的属性和方法(visible,show等)以及渲染周期管理,并为开发Widget,建立了一套通用的模式。
Plugin类 可以向对象灵活 添加/移除 额外的功能。
类相关关系如下:
Attribute uses EventTarget(掺元继承);Base uses Attribute and Plugin.Host(掺元继承);Widget extends Base(OO继承)
Attribute
通过Attribute类可以为任何的类扩充属性管理功能。扩充后,类将被添加get和set方法去获取和存储属性值,同时支持属性值修改的change事件来监听值的变化。
此外,属性可以通过配置getter、setter和validator方法来自定义值的存取和验证。属性也支持被设置为‘read-only'或'write-once'。
使用Attribute,需要引入依赖模块’attribute‘
1,使用Attribute扩充自定义的类
function MyClass(){}
Y.augment(MyClass,Y.Attribute);
如此,MyClass实例就可以使用Attribute类里定义的方法来配置属性。具体Attribute方法列表可参考API文档。
注意:通常情况下,与augment Attribute相比,更多的实现是继承Base类(Base uses Attribute)。Base默认延时初始化属性,可以提高程序的性能。
使用Attribute,也可以设置延时初始化。
2,为自定义的类添加属性
可以在自定义类中使用Attribute的addAttrs方法为类添加多个属性,也可以使用addAttr方法添加单个属性。addAttrs方法接收属性配置信息和默认值信息两个参数,第三个参数标记是否延时初始化。
代码如下:
function MyClass(userValues) { // 属性配置信息 var attributeConfig = { attrA : { value:5, getter:function(v){} //... }, attrB : { // ... } }; this.addAttrs(attributeConfig, userValues); }; Y.augment(MyClass,Y.Attribute); // 初始化值。name/value对 var o = new MyClass({ attrA:5 }); // 实例化后,设置属性值 o.set("attrB", "Hello World!");
3,属性配置参数列表
每个属性都可以配置以下参数(大小写敏感)
value | Any | 默认值 |
valueFn | Function | 返回值作为属性值,覆盖value属性值;如果返回undefined,则仍采用value值 |
getter | Function | 调用对象的get(attr)方法时触发,可以自定义返回值。function(value,attrName){} |
setter | Function |
调用对象的set(attr,v)方法时触发,function(value,name),返回值作为属性值。 如果返回 Attribute.INVALID_VALUE ,将阻止更新值。 |
validator | Function | 调用对象set方法前触发,function(value,name),返回false将阻止set属性。 |
readOnly | Boolean | 是否只读 |
writeOnce | Boolean or ‘initOnly’ | 只能调用set方法赋值一次;如果是’initOnly‘,只能在initialization时赋值,如果基于Base了的对象,意味着只能在构造执行中初始化赋值。 |
broadcast | Int | 默认情况下,属性的change事件不会广播给YUI实例或全局YUI实例。设置broadcase属性,可以启动广播,类似customEvent的broadcast ,取值 1,2 |
lazyAdd | Boolean | 使用addAttrs方法添加的属性,是否当第一次调用get/set方法的时候初始化属性。继承自Base的对象采用懒加载方式,可以设置该属性改变延时初始化行为。 |
cloneDefaultValue |
’shallow‘,’deep‘, ’true‘,’false‘ |
该属性仅支持Base而不支持Attribute。控制Base的ATTRS中属性的默认值为引用类型时是如何处理的。默认情况下,对象和数组采用深克隆以保护值的修改。 设置cloneDefaultValue=false,将禁用克隆,这在值为公用的数组或对象时有用。如果设置为shallow,将使用浅克隆方式;如果设置为true或deep,将采用深克隆。 |
4,属性值change事件
使用attribute来存储对象状态的关键好处之一就是可以使用attribute change事件。当attribute的set方法被调用时就会触发change事件。
事件类型定义方式为:"[attributeName]Change"。属性change事件可以使用‘on'和’after'方法监听。
注意:无论设置属性是否成功,都会触发on监听器;但如果属性设置未通过验证,则不会触发after监听。
示例方法展示了事件注册及事件对象的相关属性和方法:
var o = new MyClass({ attrA:5 }); o.on('attrAChange',function(e){ var prevVal = e.prevVal;//获取旧值 var newVal = e.newVal;//获取新值 var attrName = e.attrName;//触发change事件的属性值 var subAttrName = e.subAttrName;//如果change事件触发的属性为X.a.b,那么attrName返回X,而subAttrName返回X.a.b if(/*..*/){ e.preventDefault(); e.stopImmediatePropagation(); e.stopPropagation(); e.halt(); } }); o.after('attrAChange',function(e){ //.... });
5,set方法设置属性流程图
6,设置子属性
如果属性为object对象,属性如下:
o.set("strings", { ui : { accept_label : "OK", decline_label : "Cancel", }, errors : { e1000 : "Not Supported", e1001 : "Network Error" } });
那么,可以通过下面的方式设置子属性:
// 设置存在的属性 o.set("strings.ui.accept_label", "Yes"); o.set("strings.ui.decline_label", "No"); // 为存在的属性添加子属性 o.set("strings.errors.e2000", "New Error");
但是如果为没有的子属性设置子属性将不会成功,如下
o.set("strings.messages.intro", "Welcome");//无效
同样,获取子属性方法如下:
var lbl = o.get("strings.ui.accept_label");
发表评论
-
Twitter Flight 学习小结
2013-08-29 10:57 1913链接:twitter flight 关键字: 基于事件交 ... -
使用jQuery Deferred 和 Promise 创建响应式应用程序
2012-11-12 20:41 6180翻译自:Creating Responsive Applica ... -
编写 Sublime Text2 的 nodejs debug 插件
2012-08-27 22:07 4659使用sublime text2 编写 node 代码 ... -
Image beacon
2012-05-06 11:42 1647转帖:http://www.denisdeng.com/?p= ... -
YUI3学习(十)---基于组件框架的Widget实例(GoogleMapWidget)
2012-03-03 20:37 2867本文遵循YUI3 Widget组件设计理念,继承YUI Wi ... -
Google Maps API V3 学习摘要
2012-03-03 20:40 3805Google Maps API V3 学习摘要 ... -
大话HTML DOM与XML DOM的区别与联系【转】
2011-10-04 11:21 2305原文链接: http://deve ... -
dojo类机制模拟实现
2011-09-29 11:00 1592偶然在infoq上看到朋友的文章《dojo类机制简 ... -
web前端研发工程师编程能力成长之路 [转]
2011-09-29 10:26 1999【背景】 如果你是刚进入WEB前端研发领域,想试试这 ... -
Web开发乱码分析总结
2011-09-28 17:08 1612今天对前端开发常见的乱码情况进行了汇总测试和分析,并做了 ... -
document.documentElement 与 document.body 的 scrollWidth、offsetWidth、clientWidth
2011-09-28 16:54 1572注:(scrollHeight、o ... -
DOCTYPE, HTML和XHTML, Strict DTD和Transitional DTD, Quirks Mode和Standard Mode
2011-09-26 16:53 1652转自:http://blog.csdn.net/w ... -
YUI3学习(九)---组件框架之 Widget
2011-08-10 21:53 2900Widget部件类是YUI3所 ... -
YUI3学习(八)---组件框架之 Plugin
2011-08-08 17:42 2310插件可以让你无侵入地为衍生自Base类的宿主对象 ... -
YUI3学习(七)---组件框架之 Base
2011-08-05 22:45 2116Base组件 Base被设计为那些衍生自Attribute和 ... -
dfssdfsfsfs
2011-08-05 14:37 0sdf s -
JavaScript链式调用小结
2011-08-03 22:47 4830zYUI3 Node对象实现链式调用的方式如下: Y. ... -
JavaScript设计模式摘要(一)
2011-08-03 22:52 2028---------------------------- ... -
YUI3 AOP
2011-07-28 23:10 0YUI3在’event-custom’模块的Y.Do类提 ... -
Yahoo关于性能优化的N条军规[转]
2011-07-21 18:48 1950一、 Yahoo的军规条例: 谨记:80%-90%的终 ...
相关推荐
**yuicompressor-maven-plugin详解** `yuicompressor-maven-plugin`是一款强大的Maven插件,主要用于优化前端资源,特别是JavaScript和CSS文件。这个插件是基于YUI Compressor,一个由Yahoo开发的开源工具,它能...
### 3. eclipse yuicompressor-maven-plugin `yuicompressor-maven-plugin`是Maven的一个插件,它将YUI Compressor集成到Maven的构建流程中。在Eclipse环境中,开发者可以方便地使用此插件在构建项目时自动对.js和....
yuicompressor-maven-plugin, 用于压缩 (Minify/Ofuscate/Aggregate) Javascript文件和使用 YUI 压缩器的CSS文件的Maven 插件 [[Flattr this git repo] ( http://api.flattr.com/button/flattr-badge-large.png)]...
【标题】"yui-yuidoc-yuidoc-50-529-gc631758" 指向的是一个关于 Yahoo User Interface Library (YUI) 和 YUIDoc 的特定版本或修订版。YUI 是一个开源的 JavaScript 库,提供了一系列模块化的工具,用于构建富有交互...
3. **数据绑定(Data Binding)**:YUI-EXT支持数据绑定,允许UI组件与后台数据模型直接关联。当数据模型发生变化时,UI会自动更新,反之亦然。这极大地简化了数据驱动的界面开发。 4. **表单(Forms)**:YUI-EXT...
在"YUI-ajax框架开发文档"中,我们可以深入探讨YUI如何通过其Ajax组件实现异步数据通信。 YUI中的Ajax框架主要由`YAHOO.util.Connect`和`YAHOO.widget.DataSource`两个关键部分组成。`YAHOO.util.Connect`是YUI的...
YUI3的事件系统是其强大功能之一,它允许开发者监听和处理DOM元素及自定义事件。在“yui3-master.zip”的“event”模块中,包含了丰富的事件相关的API,如`Y.on`, `Y.fire`等,它们使得事件处理更加灵活且易于维护...
yuicompressor-2.4.2.jar yuicompressor-2.4.7.jar jsZip.exe yuicompressor yui compressor js压缩工具 javascript压缩工具 css压缩工具 ------------------------------------ //压缩JS java -jar yui...
**YUI3 Dialog组件详解** YUI3是Yahoo!推出的一款强大的JavaScript库,它提供了丰富的UI组件和工具,用于构建高性能、跨平台的Web应用程序。Dialog组件是YUI3中的一个重要部分,它允许开发者创建可交互的弹出窗口,...
3. 运行构建:保存配置后,执行构建操作,Idea会自动调用yuicompressor对指定文件进行压缩。 除了基本的压缩功能,yuicompressor还有其他优势。例如,它支持多种语言的输入,包括JavaScript、CSS以及HTML,并且兼容...
YUI 库,全称Yahoo! UI Library。是一组工具和控件,用JavaScript写成, 为的是用DOM 脚本,DHTML和AJAX等技术创建丰富的网页交互式应用程序。 YUI 基于BSD协议,对所有的使用方式都是免费的。YUI 项目包括YUI 库和两...
通常,这样的组件会有一个主JS文件(如`yui-form-validator.js`),可能还有一个CSS文件(如`yui-form-validator.css`)来处理样式,以及一些示例或测试用例文件。 **相关知识点:** 1. **YUI库**:了解YUI的基本...
YUI 3包含了一系列核心模块,如Event(事件处理)、Node(DOM操作)、IO(异步数据交互)等,同时还有许多可选的组件,如Grids(表格)、Charts(图表)、Form(表单元素)等,覆盖了前端开发的多个方面。...
yui compressor 2.4.6 发布日期:2011-04-15 用例: java -jar yuicompressor-2.4.6.jar myfile.js -o myfile-min.js
YUI的开放架构允许开发者自定义模块,创建自己的组件,进一步丰富框架的功能。 通过深入理解和熟练运用YUI框架API,开发者可以构建出响应式、高性能的Web应用程序,同时享受到YUI提供的强大工具链带来的便利。无论...
这是集成的关键组件。 2. **配置File Watcher**:在IDE中,选择`File` > `Settings`(Windows/Linux)或`WebStorm` > `Preferences`(Mac),然后导航到`Tools` > `File Watchers`。 3. **添加新的File Watcher**...
npm install yui-compressor ``` 安装完成后,可以使用以下命令对JavaScript或CSS文件进行压缩: ```bash java -jar path/to/yuicompressor.jar --type js input.js -o output.min.js java -jar path/to/yui...
总之,grunt-yui-compressor是前端开发中不可或缺的工具之一,它结合了Grunt的自动化能力和YUI Compressor的压缩效率,使得前端资源管理更加便捷高效。通过理解其源码,开发者可以更好地利用这个工具,优化自己的...