SlideShare une entreprise Scribd logo
1  sur  51
Télécharger pour lire hors ligne
YUI 3.x 简介
  拔赤 bachi@taobao.com
http://www.uedagazine.com
        2010-06-03
YUI 体系
   YUI 2.x             YUI 3.x

YUI Compressor   Combo Handler

YUI PHP Loader     YUI Builder

   YUI Test            Yslow
http://developer.yahoo.com/yui/3/
•   YUI 2.x的发展
•   YUI 3.x初探
•   YUI 3.x新手入门
•   Node & NodeList
•   YUI 3.x中的OO
•   YUI 3.x中的杂项
• YUI 2.x的发展
•   YUI 3.x初探
•   YUI 3.x新手入门
•   Node & NodeList
•   YUI 3.x中的OO
•   YUI 3.x中的杂项
库时代…
2005 - prototype,dojo
2006 - jquery,yui,mootools
2007 - ext
2008 - QooXDoo
2009 - …
“库”所作的事情

1,初级封装(Dom,Event,Ajax)
2,中级封装(拖拽、动画)
3,高级封装(widget)(日历,Treeview)
4,扩展性(OOP,Plugin。。。)
YUI 2.x的发展

• 2006/2/13 YUI beta(0.10.0)
• ~
• 2009/9/14 YUI 2.8.0
YUI 2.x 的特色

1,完整的工具集(使用方便)
2,颗粒化设计(团队开发)
3,强沙箱(不仅仅是闭包)
4,yui combo(性能提升)
• YUI 2.x的发展

• YUI 3.x初探
•   YUI 3.x新手入门
•   Node & NodeList
•   YUI 3.x中的OO
•   YUI 3.x中的杂项
对YUI的一次彻底重构




   YUI3.x的架构
YUI 3.x的发展

2008/8/13 YUI3 pr1
2008/12/9 YUI3 pr2
2009/6/24 YUI3 beta1
2009/9/26 YUI3 1
2010 …
增强的YUI
1,加强工具集(强化了的工具集)
2,彻底的模块化设计(模块间的解耦)
3,YUI组件模板(规格统一的组件模型)
4,更简洁的语法(书写阅读更流畅)
5,更完整的底层机制(AOP、CustomEvent、Plugin)
YUI 2.x 的书写风格
YUI 3.x的书写风格
YUI 3.x 架构
•   Seed
•   Core
•   Component Framework
•   Component
•   Widgets
Seed

种子
开发者只需要加载种子就
可以获得YUI的所有组件
Core


库核心
包含Dom,Event和新
的Node
Component Framework


       组件框架
       开发widgets的基本框架
Component


工具、控制
包含工具、特效、
控制项
• YUI 2.x的发展
• YUI 3.x初探
• YUI 3.x新手入门
• Node & NodeList
• YUI 3.x中的OO
• YUI 3.x中的杂项
观念1
• 使用YUI3.x有两种方法
 – 用Seed加载
 – 用传统的Script引用法
Seed方法
<script src="yui/3.0.0/build/yui/yui‐min.js"></script>
<script>
YUI().use('node',function(Y){
       /*
              Y就是这个Scope中
              的YUI实例,可以通过Y来
              获取相关方法
       */
       Y.get('#demo');
});
</script>
传统Script方法
http://developer.yahoo.com/yui/3/configurator/
观念2
• YUI3.x是Instance-based
  – 每个Instance都是相互独立
    且互不干扰的
Instace-based - 可实例化
• YUI 2.x
  – YAHOO作为全局变量,只能有一个,很容易
    被修改
  YAHOO.widget.Editor = DoSth;//开发者A写的
  ...
  YAHOO.widget.Editor = DoNoth;//开发者B写的

• YUI 3.x
  – YUI() 闭包中的Y是一个全新的实例
  YUI().use('editor',function(Y){
         Y.Editor = DoSth;//开发者A写的
  });
  YUI().use('rich‐editor',function(Y){
         Y.Editor = DoNoth;//开发者B写的
  });
同一个页面中多个App的实现




    http://my.yahoo.com/
同一个页面中多个App的实现




  http://xiaoshuo.taobao.com/
Instace-based 的优势

1,一个页面上有多个程序
2,每个Scope有自己的YUI Instance,只带
 有所需的组件
3,每个Instance相互独立,方便多人开发
4,Sandbox可以提供安全的闭包
5,每个Instance的YUI3.x的版本可以不同
观念3
• YUI可以被用作构造器
 – 轻易变身
YUI构造器
• 推荐的写法
 YUI().use('node',function(Y){
        //..
 });



• 也可以这样写
 var QQ = YUI();//生成一个新的YUI实例
 QQ.use('node',function(Q){
        //..
 });
观念4
• YUI3.x可以将任意库框架进来
 – YUI3.x是框架,非库
YUI3.x可以将任意库框架进来

YUI({
     modules:{
           jquery:{
                fullpath:'jquery.js'
           }
     }
}).use('jquery',function(Y){
     $('#foo').toggle('myClass');
});
YUI3.x的四大观念

1,两种引入方式
2,每个Scope中有独立的实例
3,YUI的两种构造风格
5,YUI3.x可以框架住任何库
• YUI 2.x的发展
• YUI 3.x初探
• YUI 3.x新手入门
• Node & NodeList
• YUI 3.x中的OO
• YUI 3.x中的杂项
Selector
• YUI 2.x
  var D = YAHOO.util.Dom;
  var el = D.get('foo');
  var items = 
  D.getElementsByClassName('selected','li',el);


• YUI 3.x
  var items = Y.all('#foo li.selected');
对Dom的Wrap
• YUI 2.x 用DOM取到的依然是TMLElement
  var D = YAHOO.util.Dom;
  var el = D.get('foo');
  alert(el.nodeName);


• YUI 3.x
  var el = Y.one('#foo');
  alert(el.nodeName);//undefined
  alert(el.get('NodeName'));//DIVs
封装前后的比较
   YUI Node       HTMLElement

appendChild()    appendChild()
removeChild()    removeChild()
parentNode       parentNode

contains()       contains()
insertBefore()   insertBefore()
children         children

addClass()
toggleClass()
region
统一的接口
• Node
  – addClass方法
  var el = Y.one('#foo')
  el.addClass('red');


• NodeList
  – addClass方法
  var items = Y.all('#foo li');
  items.addClass('red');
Event
• 事件绑定方法1
 Y.on('click',function(e){
      //处理事件
 },'#foo');


• 事件绑定方法2
 var el = Y.one('#foo');
 el.on('click',function(e){
      //处理事件
 });
Event - 被封装后的“事件”

• YUI3.x对事件做了封装,而非单纯的DOM
  Event
被封装后的“事件”
• YUI 2.x
  var E = YAHOO.util.Event;
  E.on('foo','click',function(e){
       alert(e);//click
       E.stopEvent(e);//阻止冒泡
  });
• YUI 3.x
  Y.on('click',function(e){
       alert(e.type);//undefined
       e.halt();//阻止冒泡
  },'#foo');
YUI3的所有事件都是CustomEvent
• YUI 3.x
 var el = Y.one('#foo');
 el.on('click',function(e){
      //..
 });
 var p = new Y.Calendar('#calendar');
 p.on('range_select',function(e){
      //..
 });
• YUI 2.x的发展
• YUI 3.x初探
• YUI 3.x新手入门
• Node & NodeList
• YUI 3.x中的OO
• YUI 3.x中的杂项
YUI 3.x中的OO
• 对象
 – Y.clone(克隆)
 – Y.merge(合并)
 – Y.aggregate(挂载)
• 函数
 – Y.augment(扩充类)
 – Y.extend(继承)
 – Y.bind(绑定上下文)
• 基础
 – Y.mix(混淆)
• YUI 2.x的发展
•   YUI 3.x初探
•   YUI 3.x新手入门
•   Node & NodeList
•   YUI 3.x中的OO
• YUI 3.x中的杂项
YUI 3.x中的杂项
• Debug
• IO
• Queue
Debug
• YUI 2.x
  – alert()
  – YAHOO.log()
  – console.log()
  – YAHOO.dump()


• YUI 3.x
  – Y.log()
  – Y.dump()
IO & Queue

• IO
  – YUI2.x的Connection,增加了flash跨域
• Queue
  – 异步队列
YUI 3.x的设计线索

1,YUI2.x 分散式架构、初学者理解困难
2,YUI3.x 内建YUI2.x的Loader、Element、
 Selector
3,易用性 和 专业性之间的权衡
Q&A

Contenu connexe

En vedette

F2e security
F2e securityF2e security
F2e securityjay li
 
Js doc toolkit
Js doc toolkitJs doc toolkit
Js doc toolkitjay li
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoloadjay li
 
Html&css培训 舒克
Html&css培训 舒克Html&css培训 舒克
Html&css培训 舒克jay li
 
2011淘宝首页开发实践
2011淘宝首页开发实践2011淘宝首页开发实践
2011淘宝首页开发实践jay li
 
淘宝前端技术巡礼
淘宝前端技术巡礼淘宝前端技术巡礼
淘宝前端技术巡礼jay li
 

En vedette (6)

F2e security
F2e securityF2e security
F2e security
 
Js doc toolkit
Js doc toolkitJs doc toolkit
Js doc toolkit
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
 
Html&css培训 舒克
Html&css培训 舒克Html&css培训 舒克
Html&css培训 舒克
 
2011淘宝首页开发实践
2011淘宝首页开发实践2011淘宝首页开发实践
2011淘宝首页开发实践
 
淘宝前端技术巡礼
淘宝前端技术巡礼淘宝前端技术巡礼
淘宝前端技术巡礼
 

Similaire à Yui3简介

YUI介绍和使用YUI构建web应用
YUI介绍和使用YUI构建web应用YUI介绍和使用YUI构建web应用
YUI介绍和使用YUI构建web应用Adam Lu
 
Yui rocks
Yui rocksYui rocks
Yui rocksAdam Lu
 
基于yui3的组件开发进阶
基于yui3的组件开发进阶基于yui3的组件开发进阶
基于yui3的组件开发进阶jay li
 
YUIconf2010介绍
YUIconf2010介绍YUIconf2010介绍
YUIconf2010介绍ling yu
 
Node js实践
Node js实践Node js实践
Node js实践myzykj
 
YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練Joseph Chiang
 
YUI is Sexy (for JSDC.tw)
YUI is Sexy (for JSDC.tw)YUI is Sexy (for JSDC.tw)
YUI is Sexy (for JSDC.tw)Joseph Chiang
 
用Jquery实现拖拽层
用Jquery实现拖拽层用Jquery实现拖拽层
用Jquery实现拖拽层yiditushe
 
KISSY for starter
KISSY for starterKISSY for starter
KISSY for starteryiming he
 

Similaire à Yui3简介 (10)

YUI介绍和使用YUI构建web应用
YUI介绍和使用YUI构建web应用YUI介绍和使用YUI构建web应用
YUI介绍和使用YUI构建web应用
 
Yui rocks
Yui rocksYui rocks
Yui rocks
 
YUI 3 菜鳥救星
YUI 3 菜鳥救星YUI 3 菜鳥救星
YUI 3 菜鳥救星
 
基于yui3的组件开发进阶
基于yui3的组件开发进阶基于yui3的组件开发进阶
基于yui3的组件开发进阶
 
YUIconf2010介绍
YUIconf2010介绍YUIconf2010介绍
YUIconf2010介绍
 
Node js实践
Node js实践Node js实践
Node js实践
 
YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練
 
YUI is Sexy (for JSDC.tw)
YUI is Sexy (for JSDC.tw)YUI is Sexy (for JSDC.tw)
YUI is Sexy (for JSDC.tw)
 
用Jquery实现拖拽层
用Jquery实现拖拽层用Jquery实现拖拽层
用Jquery实现拖拽层
 
KISSY for starter
KISSY for starterKISSY for starter
KISSY for starter
 

Plus de jay li

犀牛书第六版
犀牛书第六版犀牛书第六版
犀牛书第六版jay li
 
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践jay li
 
Jswebapps
JswebappsJswebapps
Jswebappsjay li
 
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript潜力无限的编程语言Javascript
潜力无限的编程语言Javascriptjay li
 
Responsive Web UI Design
Responsive Web UI DesignResponsive Web UI Design
Responsive Web UI Designjay li
 
深入剖析浏览器
深入剖析浏览器深入剖析浏览器
深入剖析浏览器jay li
 
HTML/CSS/JS基础
HTML/CSS/JS基础HTML/CSS/JS基础
HTML/CSS/JS基础jay li
 
中国元素在设计中的应用 -如瑟
中国元素在设计中的应用 -如瑟中国元素在设计中的应用 -如瑟
中国元素在设计中的应用 -如瑟jay li
 
编码大全 拔赤
编码大全 拔赤编码大全 拔赤
编码大全 拔赤jay li
 
小控件、大学问
小控件、大学问小控件、大学问
小控件、大学问jay li
 
Mobile UI design and Developer
Mobile UI design and DeveloperMobile UI design and Developer
Mobile UI design and Developerjay li
 
Html5form
Html5formHtml5form
Html5formjay li
 
新业务新员工培训 Banner设计
新业务新员工培训   Banner设计新业务新员工培训   Banner设计
新业务新员工培训 Banner设计jay li
 
夏之 专题设计
夏之 专题设计夏之 专题设计
夏之 专题设计jay li
 
Ecmascript
EcmascriptEcmascript
Ecmascriptjay li
 
2011彩票首页开发实践
2011彩票首页开发实践2011彩票首页开发实践
2011彩票首页开发实践jay li
 
Web设计的画纸深入了解我们的显示器
Web设计的画纸深入了解我们的显示器Web设计的画纸深入了解我们的显示器
Web设计的画纸深入了解我们的显示器jay li
 
Html5@taobao
Html5@taobaoHtml5@taobao
Html5@taobaojay li
 
前端调试工具,编码相关,性能相关
前端调试工具,编码相关,性能相关前端调试工具,编码相关,性能相关
前端调试工具,编码相关,性能相关jay li
 

Plus de jay li (20)

犀牛书第六版
犀牛书第六版犀牛书第六版
犀牛书第六版
 
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践
 
Jswebapps
JswebappsJswebapps
Jswebapps
 
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript潜力无限的编程语言Javascript
潜力无限的编程语言Javascript
 
Responsive Web UI Design
Responsive Web UI DesignResponsive Web UI Design
Responsive Web UI Design
 
深入剖析浏览器
深入剖析浏览器深入剖析浏览器
深入剖析浏览器
 
HTML/CSS/JS基础
HTML/CSS/JS基础HTML/CSS/JS基础
HTML/CSS/JS基础
 
中国元素在设计中的应用 -如瑟
中国元素在设计中的应用 -如瑟中国元素在设计中的应用 -如瑟
中国元素在设计中的应用 -如瑟
 
编码大全 拔赤
编码大全 拔赤编码大全 拔赤
编码大全 拔赤
 
小控件、大学问
小控件、大学问小控件、大学问
小控件、大学问
 
Mobile UI design and Developer
Mobile UI design and DeveloperMobile UI design and Developer
Mobile UI design and Developer
 
Html5form
Html5formHtml5form
Html5form
 
Slide
SlideSlide
Slide
 
新业务新员工培训 Banner设计
新业务新员工培训   Banner设计新业务新员工培训   Banner设计
新业务新员工培训 Banner设计
 
夏之 专题设计
夏之 专题设计夏之 专题设计
夏之 专题设计
 
Ecmascript
EcmascriptEcmascript
Ecmascript
 
2011彩票首页开发实践
2011彩票首页开发实践2011彩票首页开发实践
2011彩票首页开发实践
 
Web设计的画纸深入了解我们的显示器
Web设计的画纸深入了解我们的显示器Web设计的画纸深入了解我们的显示器
Web设计的画纸深入了解我们的显示器
 
Html5@taobao
Html5@taobaoHtml5@taobao
Html5@taobao
 
前端调试工具,编码相关,性能相关
前端调试工具,编码相关,性能相关前端调试工具,编码相关,性能相关
前端调试工具,编码相关,性能相关
 

Yui3简介