SlideShare a Scribd company logo
1 of 55
Download to read offline
1




    YUI Library
     前端工程開發實務訓練 (4/8)

         講師:蔣定宇 / josephj




       Copyright © 2012 FITPI. All rights reserved.
2



          Why YUI?
    ๏ 幫助了解 JavaScript。
    ๏ 一致的物件導向基礎。
    ๏ 自訂事件介面。
    ๏ 完整 Software Stacks。
    ๏ 模組與 Loader 架構。
    ๏ 與 Node.js 整合。
    ๏ 非社群、有公司資源開發跟品質管理。
             Copyright © 2012 FITPI. All rights reserved.
3



      Why not YUI?


    ๏ 知名度跟普及率較差。
    ๏ 語法較複雜、不直覺、門檻較高。
    ๏ 與 Yahoo! 有關聯。



            Copyright © 2012 FITPI. All rights reserved.
4




     整體來說 YUI 提供了團隊開發的重要基礎
     物件導向、模組化、Loader、自訂事件等
       對程式碼的一致性、擴充幫助非常大


    搞懂架構之後,用任何東西都會比別人有 Sense!



            Copyright © 2012 FITPI. All rights reserved.
5




    YUI 的架構
          模組 / 載入器




     Copyright © 2012 FITPI. All rights reserved.
6




    模組化               Modularization
     將功能分門別類、要用的時候挑選組合
     http://www.flickr.com/photos/bdesham/2432400623
           Copyright © 2012 FITPI. All rights reserved.
7


    NASA 國際太空站




    除了樂高積木、國際太空站也是模組化的好範例
          Copyright © 2012 FITPI. All rights reserved.
                                                         http://www.flickr.com/photos/nasamarshall/4546245011/
8


    NASA 國際太空站




    由 7 個不同國家所提供的 50 多個模組
         Copyright © 2012 FITPI. All rights reserved.   http://astronomy.wikia.com/wiki/
                                                          International_Space_Station
9



      模組化的好處

    舉凡建築、航太、機械、硬體到軟體

      在任何分工精細的工程領域

       模組化開發是必然趨勢

    「採用既有模組、避免重新打造輪子」



         Copyright © 2012 FITPI. All rights reserved.
10



           最基本的 JS 模組化

     <script src="jquery-1.7.2.js"></script>                              // 核心函式庫
     <script src="jquery.ui.core.js"></script>                            // 模組 1
     <script src="jquery.ui.widget.js"></script>                          // 模組 2
     <script src="jquery.ui.accordion.js"></script>                       // 模組 3




 開發小網站這樣做沒問題,但稍微複雜的就不適合了
  全域變數、維護性、前後順序、模組效率問題

                           Copyright © 2012 FITPI. All rights reserved.
11


                YUI 模組架構
     當覺得程式太多、需重複使用,切分模組會是很棒的作法
     對於使用者來說、不用為了一個小功能把一堆東西拉近來

         所有 YUI 模組檔案皆必須以這樣的方式包覆:
     editor.js YUI.add("模組名稱", function (Y) {
                        editor

                  // 上方的參數 Y 代表了 YUI 的 Instance
                  
                  function Editor() {                                   Why callback?
                      // 這是物件的建構式
                                                                       放到頁面上時不會立即執行、
                  }        
                                                                       等到要用時再執行即可。好處
                  // 將建構式提昇到 Global
                                                                       是做程式碼的隔離、不再需要
                  Y.Editor = Editor;
                                                                       處理每個模組間的先後順序。

                  
              }, requires:["所需模組 1", "所需模組 2"]);  
                        Copyright © 2012 FITPI. All rights reserved.
12



        使用 YUI 模組
     對使用者來說、只需指定模組名稱即可使用

        YUI().use("editor", function (Y) {
         
         
           // 此 Callback 代表所需模組皆已載入完成    
           // 你就可以直接建立 Y.Editor 的例項
           
           var editor = new Y.Editor();
            
        });




                Copyright © 2012 FITPI. All rights reserved.
其他選擇 - RequireJS
13




         目前除了 YUI,尚未有其他函式庫內建模組化
           但 RequireJS 可以做到「從零開始」

     // YUI Module                                       // AMD Module
     YUI.add("editor", function () {                     define(function () {
         function Editor { /* Constructor */ }               function Editor { /* Constructor */ }
         Y.Editor = Editor;                                  return Editor;
     });                                                 });
     YUI.use("editor", function (Y) {                    require(["editor"], function (Editor) {
         new Y.Editor();                                     new Editor();
     });                                                 });




             概念幾乎一樣,但 YUI 已經有豐富的模組
          RequireJS 則只是個架構,你要自己把模組加進去

                                  Copyright © 2012 FITPI. All rights reserved.
14


        模組名稱與載入
          新手大多只要負責「用」模組即可
       需大家理解「模組是 YUI 的最小單位」
      要用任何功能,你必須知道模組的名稱:

               YUI 的所有模組列表
     http://yuilibrary.com/yui/docs/yui/modules.html



             一個模組通常就是一個檔案
        所以模組化的缺點是... 檔案會變多!
     背後也需要有機制解決 Request 數量的問題
                  Copyright © 2012 FITPI. All rights reserved.
15


           練習:YUI 模組
            http://f2eclass.com/lab/yui/module.html

            // 新增一個 YUI 模組
            YUI.add("模組名稱", function () {
              // 模組內容
            },"自定版號", {requires:["相依模組1"]});


๏ 已經存在一個 class 模組,內有 Y.Class 介紹基本資訊及
     getStudents 的函式。
๏ 請利用 YUI.add 新增一個 fitpi 模組 ,裡面需定義學生名稱列表
     (Y.Class.students) 並指定相依模組。
๏ 最後 YUI().use 指定 fitpi 並呼叫 Y.Class.getStudents 函式。

                     Copyright © 2012 FITPI. All rights reserved.
載入器                        Loader
有效率地載入所需要的的 CSS 與 JavaScript 檔案
    http://www.flickr.com/photos/bdesham/2432400623

                         16
小網頁不需考慮載入問題
17




                   在初期、所需的 JS 與 CSS 都很小




                                                  jQuery - 32K




     <script src="http://code.jquery.com/jquery-1.4.2.min.js"></script> 可做很多事!

                          http://www.flickr.com/photos/halfbisqued/2353845688/
                                Copyright © 2012 FITPI. All rights reserved.
網站必需考慮載入方式
18




      發展到一定規模,該如何選擇每頁所需的檔案呢?

                                                天哪!我該如何處理
                                            這麼多的 CSS / JS 檔案?




     模組化會切分出很多檔案,如何管理及載入是一門學問
          http://www.nipic.com/show/2/55/d96dde66860c5190.html

                  Copyright © 2012 FITPI. All rights reserved.
較差的載入方式
19




         效能及維護性問題
       較不專業的網站在面對這樣的問題
     都是純手工一頁一頁寫、或者是打成一大包
     得考慮先後順序、維護性低、也無法最佳化




          Copyright © 2012 FITPI. All rights reserved.
YUI 內建載入機制
20




        YUI 的 Loader 機制
      協助載入零散且多的模組檔案




      http://www.flickr.com/photos/billjacobus1/123644872/
              Copyright © 2012 FITPI. All rights reserved.
YUI 模組載入機制
21




     以 YUI DataTable 為範例 (datatable 模組)

                                                   不 reload 的行為很多:換
                                                   頁、排序、直接編輯。也可
                                                   以有各種資料來源,是個很
                                                   複雜的模組。




               Copyright © 2012 FITPI. All rights reserved.
22



             YUI 模組載入機制
                  只要幾行程式碼就可以載入所需模組

     <script src="http://yui.yahooapis.com/3.7.3/build/yui/yui-min.js"></script>
     <script>
     YUI().use("datatable", function (Y) {

         
         alert(Y.DataTable);

     });

     </script>




                 能想像 6 行程式碼背後、做了多少事嗎 ?


                               Copyright © 2012 FITPI. All rights reserved.
計算相依模組的過程
23




     arraylist   yui-base         pluginhost            event-synthetic             attribute-core        attribute-events



       model     event-delegate          attribute-extras             array-extras         array-invoke        json-parse




                       escape            node-base            base-plugin-host            node-style



                            model-list         base-base          event-focus             view



                        node-event-delegate                classnamemanager              attribute




                        datatable-core             datatable-head               datatable-body




                                             base-build              widget




                                                       yui (Seed)        YUI().use('datatable')
                                          Copyright © 2012 FITPI. All rights reserved.
24


       Combo Handler
                      強大的壓縮機
                     YUI().use('datatable')


      前一頁只列出了 28 個模組,但實際上會有 64 個
     64 個模組就代表了 64 個檔案、 你可能會覺得很誇張
      但模組化就是要把不相干的程式抽離、盡可能精簡
     YUI 的 Combo Handler 可把數量的問題徹底解決

      http://yui.yahooapis.com/combo?
                                                  <模組1的           案路徑>&
                                                  <模組2的           案路徑>&
                                                  ...
                   Copyright © 2012 FITPI. All rights reserved.
25

        超自動化的平行載入機制
                    YUI().use('datatable')


     你所引用的 YUI 種子檔



                                   先載入相關 CSS




         將所需 YUI 模組分散成 3 個請求、平行下載
     分散的邏輯:「檔案總數量」、「瀏覽器同時請求數量」、「瀏覽器 GET 長度的限制」
                   Copyright © 2012 FITPI. All rights reserved.
26


                      YUI 載入效能
                      從種子變成大樹只花了 323 ms

     YUI().use('datatable')




                              323ms




 是一棵完全沒有贅肉的大樹、因 Module 的切分非常的細、用不到的絕不載入

                               Copyright © 2012 FITPI. All rights reserved.
27

     連 jQuery 作者都說...

                                  YUI().use() + pulling code off of Yahoo's CDN is
                                  damn sexy and should be promoted *VERY*
                                  heavily.




                                 YUI 自動載入函式庫的方式實在
                                 太 Sexy 了、應該被大力推廣


     The creator of jQuery



John Resig                         http://www.quora.com/How-could-YUI3-improve-its-image-compared-to-
                                   jQuery-MooTools-etc


                         Copyright © 2012 FITPI. All rights reserved.
28



                        練習:Loader
                           http://f2eclass.com/lab/yui/loader.html



             這個練習只要按 F12、選取 Network (網路)
                觀看 YUI 的 request 即可

     <script type="text/javascript" src="http://yui.yahooapis.com/3.7.3/build/yui/yui-min.js"></script>
     <script>
     YUI().use("datatable", function (Y) {
         Y.log(Y.DataTable);
         alert("已經載入 datatable 模組");
     });
     </script>




                                      Copyright © 2012 FITPI. All rights reserved.
29




     YUI 官網介紹
     http://yuilibrary.com




        Copyright © 2012 FITPI. All rights reserved.
30



             YUI 官網介紹
     ๏ Quick Start
       新手上路

     ๏ User Guides
       分門別類列出 YUI 官方所有內容

     ๏ Getting Started
       針對一個模組的介紹

     ๏ API Documentation
       列出一個模組的所有屬性、方法、事件

     ๏ Module
       大致了解模組的分法
       http://yuilibrary.com/yui/docs/yui/modules.html


                      Copyright © 2012 FITPI. All rights reserved.
31

                    User Guides
                    列出 YUI 所包含的所有東西




                                            無介面的 JS 功能                  CSS 工具
     基本 DOM Event




       元件架構




                                                                     有介面的 JS 控制項
         測試及除錯工具

                      Copyright © 2012 FITPI. All rights reserved.
32




            YUI Core
     用 YUI 處理 JavaScript 的 DOM 與 Event




              Copyright © 2012 FITPI. All rights reserved.
33



                    YUI 使用方式
                     建議放置位置:</body> 前


     <script src="http://yui.yahooapis.com/3.7.3/build/yui/yui-min.js"></script>

            模組1, 模組2, 模組3... 模組n

     <script>
     YUI().use("node", "event", function (Y) {                               有 YUI 的 Instance 可用
         
         

     });                   模組載入完畢所執行的函式
     </script>



                              Copyright © 2012 FITPI. All rights reserved.
34



                      node - 存取節點
                                                               用 CSS 選取器取得節點
                 Y.all();
                                                            ๏ 取得一個 .restaurant 節點
                 Y.one();                                         var node = Y.one(".restaurant");

                                                            ๏ 取得所有 li
     <div id="article">                                           var nodes = Y.all("li");
         <h1>新店市好吃的餐廳</h1>
         <ul class="restaurant">                            ๏ 取得第 5 個 li
              <li>可愛村便當:台北縣新店市大豐街8號</li>
              <li>阿輝現炒黃牛肉:台北縣新店市中興路三段225號</li>                    var nodes = Y.one("li:nth-child(5)");
              <li>黑人牛肉麵:台北縣新店市中興路三段176號</li>
              <li>蘇杭:台北縣新店市民權路25號2F</li>
              <li>王家包子:台北縣新店市國校路25號之1</li>
              <li>辣。四川成都小炒:台北縣新店市吉安路2-1號</li>
                                                           取得的節點可以再去取節點
              <li>山東餃子館:台北縣新店市中央路133巷19號1樓</li>
              <li>樂陶然健康小火鍋:台北縣新店市中央五街2號</li>                 ๏ 取得一個 #article 節點
              <li>六六火鍋:台北縣新店市中央路89號</li>
              <li>龍門客棧:台北縣新店市中央路98號之1</li>                          var node = Y.one("#article");

                                                             ๏ 取得 #article 下面的所有 li 節點
              <li>麵對麵:台北縣新店市中央路33號</li>
         </ul>
     </div>
                                                                    var itemNodes = node.all("li");


                          練習 - http://f2eclass.com/lab/yui/node.html
                                       Copyright © 2012 FITPI. All rights reserved.
35



             node - 存取節點
     ๏ get() / set()   取得 / 設定屬性

     ๏ addClass() / replaceClass() / removeClass() / toggleClass()
     ๏ getHTML() / setHTML                     取得 / 更新內容

     ๏ getStyle() / setStyle()               取得 / 設定樣式

     ๏ ancestor()   取得母節點

     ๏ append() / remove()                新增子節點 / 刪除節點

     ๏ 更多介紹:http://yuilibrary.com/yui/docs/node/
             練習 - http://f2eclass.com/lab/yui/node2.html

                         Copyright © 2012 FITPI. All rights reserved.
36



          event - 綁定事件
     ๏ on(<事件名稱>, <處理函式>)
     ๏ e.stopPropagation() 停止氣泡事件
     ๏ e.preventDefault() 停止預設行為
     ๏ delegate() 委任
     ๏ fire() 觸發自訂事件
     ๏ 更多介紹:http://yuilibrary.com/yui/docs/event/

                   Copyright © 2012 FITPI. All rights reserved.
37


     練習:node/event
      http://f2eclass.com/lab/yui/node-event.html


     ・利用 Y.delegate 綁事件
      ・Y.delegate("click", <函式>, <選擇器>);
     ・點擊滑鼠把 li 變成黃色
      ・<node>.addClass("highlight");
     ・雙重點擊 dblclick 把 li 給刪除
      ・<node>.remove();
     ・刪除完畢觸發一個事件
      ・Y.fire("deleted", <餐廳名稱>);
                 Copyright © 2012 FITPI. All rights reserved.
38




     YUI Anim
                      動畫




      Copyright © 2012 FITPI. All rights reserved.
39



       練習:Y.Anim
        http://f2eclass.com/lab/yui/anim.html


     ๏ var anim = new Y.Anim(<設定物件>);
     ๏ 屬性 from (Object) - 動畫開始時
     ๏ 屬性 to (Object)- 動畫結束時
     ๏ 屬性 duration (Number) - 總共秒數
     ๏ 屬性 easing (String) - 效果
     ๏ 函式 anim.run();
     ๏ 事件 end
                Copyright © 2012 FITPI. All rights reserved.
40




       YUI IO
     AJAX - Web 2.0 的基礎




       Copyright © 2012 FITPI. All rights reserved.
41


      傳統網頁更新方式
     每一次都是整頁重新整理,但可能只需小部分更新



        傳統流程:
                                                     2. 伺服器處理 Request
         使用者瀏覽器
                          1. 發出 Request
                                                                 A 網站

                               3. 伺服器回傳                          伺服器
           A 網站

        4. 整份網頁重新整理




                  Copyright © 2012 FITPI. All rights reserved.
42


     AJAX 網頁更新方式
     只從伺服器上載入所要更新的資料、而非整頁


       AJAX流程:
                                                    2. 伺服器處理 Request
        使用者瀏覽器
                    1. 用 JavaScript 發出 Request

                                                                A 網站

                             3. 伺服器回傳                           伺服器
          A 網站

       4. 只有小部分更新




                 Copyright © 2012 FITPI. All rights reserved.
43


                    練習:Y.io
                 http://f2eclass.com/lab/yui/io.html


     ๏ 放在伺服器端同一個目錄下的檔案:
        http://f2eclass.com/lab/yui/io.txt
     ๏ 發出請求:         Y.io(<url>);

     ๏ 伺服器回應:Y.on("io:complete", function (id, o) {});
     ๏ 更簡單的作法:<Node>.load(<url>); 即可將資料塞入節點中。
     ๏ 更多資料:http://yuilibrary.com/yui/docs/io/


                         Copyright © 2012 FITPI. All rights reserved.
44




             Y.JSONP
                     存取跨網域的資料



       資料存取有個叫 Same Origin Policy 的限制
      JavaScript 是不能存取目前網域以外的資料的
     JSONP 是利用 JS 可被跨域嵌入的特性而實作的




              Copyright © 2012 FITPI. All rights reserved.
常用於網站資料交換
45




     找不到 JSON



                Copyright © 2012 FITPI. All rights reserved.
JSONP 就是外部 JS!
46



                               改為 JSON




                                                                       設定函式名稱




<script src="http://api.flickr.com/services/feeds/photos_public.gne?
             tags=f2e&lang=en-us&format=json&jsoncallback=getData "></script>
                             Copyright © 2012 FITPI. All rights reserved.
練習:Y.jsonp
47




                           取得跨網域資料

     ๏ 練習網址:
       http://f2eclass.com/lab/yui/jsonp.html
     ๏ 利用 Flickr 提供的 API 介面
       ❖   http://www.flickr.com/photos/tags/<關鍵字>

       ❖   http://api.flickr.com/services/feeds/photos_public.gne?tags=<關鍵字>&lang=en-
           us&format=json&jsoncallback={callback}


     ๏ Y.jsonp(<URL>, <回傳函式>);
     ๏ 在回傳函式中把所需 HTML 組出來
     ๏ 更多資料:http://yuilibrary.com/yui/docs/jsonp/
                           Copyright © 2012 FITPI. All rights reserved.
48




         Y.Handlebars
           將 HTML 的組合從 JavaScript 中分離出來


     JSONP 的範例中我們必須在 JS 中組合 HTML
       十分的不好寫,也不符合網頁標準化的精神
       Handlebars 是專門解決此問題的樣板系統




                Copyright © 2012 FITPI. All rights reserved.
49



            練習:Y.Handlebars
     ๏ 練習網址:
        http://f2eclass.com/lab/yui/handlebars.html
     ๏ YUI().use('handlebars');
     ๏ 樣板: <script type="text/x-handlebars-template">...</script>
     ๏ 編譯:template = Y.Handlebars.compile(<HTML>);
     ๏ 輸出:template(<data>);
     ๏ 更多:http://yuilibrary.com/yui/docs/handlebars/

                             Copyright © 2012 FITPI. All rights reserved.
50




           YUI Panel
              Web 2.0 的「開新視窗」


       過去我們用 window.open 開小視窗
     但現在都是直接開一層 <div/> 直接浮在頁面上




             Copyright © 2012 FITPI. All rights reserved.
51


     YUI 視窗




     Copyright © 2012 FITPI. All rights reserved.
練習:YUI Panel
52




     http://f2eclass.com/lab/yui/panel.html

      ๏ body 增加 .yui3-skin-sam 的 class
      ๏ 指定 YUI().use 的模組為 panel
      ๏ new Y.Panel(屬性值);




                Copyright © 2012 FITPI. All rights reserved.
53



     Panel 所提供的屬性
      centered                                是否要置中對齊

       modal                                  是否為獨佔模式

       visible                                  預設是否顯示

       width                                       視窗的寬度

       height                                      視窗的高度




                 Copyright © 2012 FITPI. All rights reserved.
54



            課程回顧

     ๏ YUI 的優缺點、及它的的架構:模組化、
      載入器、物件導向開發 (進階再提)
     ๏ YUI 的官網如何使用。
     ๏ YUI 的核心函式庫:Node 與 Event,補
      足了瀏覽器的不足。
     ๏ YUI 的函式庫工具、控制項該如何使用。

             Copyright © 2012 FITPI. All rights reserved.
55




     Q&A

     Copyright © 2012 FITPI. All rights reserved.

More Related Content

What's hot

SeaJS - 前端模块化开发探索与网站性能优化实践
SeaJS - 前端模块化开发探索与网站性能优化实践SeaJS - 前端模块化开发探索与网站性能优化实践
SeaJS - 前端模块化开发探索与网站性能优化实践lifesinger
 
面向未来的重构
面向未来的重构面向未来的重构
面向未来的重构Kejun Zhang
 
更好的文件组织
更好的文件组织更好的文件组织
更好的文件组织Kejun Zhang
 
2021.laravelconf.tw.slides3
2021.laravelconf.tw.slides32021.laravelconf.tw.slides3
2021.laravelconf.tw.slides3LiviaLiaoFontech
 
一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)Kejun Zhang
 
ASP.NET Core 2.1設計新思維與新發展
ASP.NET  Core 2.1設計新思維與新發展ASP.NET  Core 2.1設計新思維與新發展
ASP.NET Core 2.1設計新思維與新發展江華 奚
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发leneli
 
CSS 入門 - 前端工程開發實務訓練
CSS 入門 - 前端工程開發實務訓練CSS 入門 - 前端工程開發實務訓練
CSS 入門 - 前端工程開發實務訓練Joseph Chiang
 
移动Web开发框架jqm探讨
移动Web开发框架jqm探讨移动Web开发框架jqm探讨
移动Web开发框架jqm探讨newker
 
程式人雜誌 2015年三月
程式人雜誌 2015年三月程式人雜誌 2015年三月
程式人雜誌 2015年三月鍾誠 陳鍾誠
 
JavaScript Code Quality
JavaScript Code QualityJavaScript Code Quality
JavaScript Code QualityJoseph Chiang
 
D2-ETao-show
D2-ETao-showD2-ETao-show
D2-ETao-showleneli
 
旺铺前端设计和实现
旺铺前端设计和实现旺铺前端设计和实现
旺铺前端设计和实现hua qiu
 
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践jay li
 
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile ServicesKuo-Chun Su
 
Responsive Web UI Design
Responsive Web UI DesignResponsive Web UI Design
Responsive Web UI Designjay li
 
Kissy模块化实践
Kissy模块化实践Kissy模块化实践
Kissy模块化实践yiming he
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoloadjay li
 

What's hot (20)

SeaJS - 前端模块化开发探索与网站性能优化实践
SeaJS - 前端模块化开发探索与网站性能优化实践SeaJS - 前端模块化开发探索与网站性能优化实践
SeaJS - 前端模块化开发探索与网站性能优化实践
 
面向未来的重构
面向未来的重构面向未来的重构
面向未来的重构
 
更好的文件组织
更好的文件组织更好的文件组织
更好的文件组织
 
2021.laravelconf.tw.slides3
2021.laravelconf.tw.slides32021.laravelconf.tw.slides3
2021.laravelconf.tw.slides3
 
一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)
 
ASP.NET Core 2.1設計新思維與新發展
ASP.NET  Core 2.1設計新思維與新發展ASP.NET  Core 2.1設計新思維與新發展
ASP.NET Core 2.1設計新思維與新發展
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
 
CSS 入門 - 前端工程開發實務訓練
CSS 入門 - 前端工程開發實務訓練CSS 入門 - 前端工程開發實務訓練
CSS 入門 - 前端工程開發實務訓練
 
移动Web开发框架jqm探讨
移动Web开发框架jqm探讨移动Web开发框架jqm探讨
移动Web开发框架jqm探讨
 
程式人雜誌 2015年三月
程式人雜誌 2015年三月程式人雜誌 2015年三月
程式人雜誌 2015年三月
 
JavaScript Code Quality
JavaScript Code QualityJavaScript Code Quality
JavaScript Code Quality
 
D2-ETao-show
D2-ETao-showD2-ETao-show
D2-ETao-show
 
2021laravelconftwslides10
2021laravelconftwslides102021laravelconftwslides10
2021laravelconftwslides10
 
旺铺前端设计和实现
旺铺前端设计和实现旺铺前端设计和实现
旺铺前端设计和实现
 
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践
 
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
 
Responsive Web UI Design
Responsive Web UI DesignResponsive Web UI Design
Responsive Web UI Design
 
Vue.js
Vue.jsVue.js
Vue.js
 
Kissy模块化实践
Kissy模块化实践Kissy模块化实践
Kissy模块化实践
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
 

Viewers also liked

WordPress客製化模板教學
WordPress客製化模板教學WordPress客製化模板教學
WordPress客製化模板教學蘇姵欣 PeiSu
 
好的網頁設計概念
好的網頁設計概念好的網頁設計概念
好的網頁設計概念蘇姵欣 PeiSu
 
From Hacker to Programmer (w/ Webpack, Babel and React)
From Hacker to Programmer (w/ Webpack, Babel and React)From Hacker to Programmer (w/ Webpack, Babel and React)
From Hacker to Programmer (w/ Webpack, Babel and React)Joseph Chiang
 
Opencart購物車-商品上架教學
Opencart購物車-商品上架教學Opencart購物車-商品上架教學
Opencart購物車-商品上架教學unethost.com
 
OpenCart模板規劃教學
OpenCart模板規劃教學OpenCart模板規劃教學
OpenCart模板規劃教學蘇姵欣 PeiSu
 
WordPress shortcode應用教學
WordPress shortcode應用教學WordPress shortcode應用教學
WordPress shortcode應用教學蘇姵欣 PeiSu
 
Sublime 外掛安裝教學
Sublime 外掛安裝教學Sublime 外掛安裝教學
Sublime 外掛安裝教學蘇姵欣 PeiSu
 
How I learn APP (2015)
How I learn APP (2015)How I learn APP (2015)
How I learn APP (2015)Ryan Chung
 
JavaScript 從零開始
JavaScript 從零開始JavaScript 從零開始
JavaScript 從零開始Adam Hung
 
Open Cart 模組架站教學
Open Cart 模組架站教學Open Cart 模組架站教學
Open Cart 模組架站教學蘇姵欣 PeiSu
 
Sublime Text 入門
Sublime Text 入門Sublime Text 入門
Sublime Text 入門Kah Wai Liew
 
Sublime text 極速應用教學
Sublime text 極速應用教學Sublime text 極速應用教學
Sublime text 極速應用教學Amos Lee
 
前端界流傳的神奇招式
前端界流傳的神奇招式前端界流傳的神奇招式
前端界流傳的神奇招式Anna Su
 

Viewers also liked (15)

WordPress客製化模板教學
WordPress客製化模板教學WordPress客製化模板教學
WordPress客製化模板教學
 
Css教學
Css教學Css教學
Css教學
 
好的網頁設計概念
好的網頁設計概念好的網頁設計概念
好的網頁設計概念
 
F2E, the Keystone
F2E, the KeystoneF2E, the Keystone
F2E, the Keystone
 
From Hacker to Programmer (w/ Webpack, Babel and React)
From Hacker to Programmer (w/ Webpack, Babel and React)From Hacker to Programmer (w/ Webpack, Babel and React)
From Hacker to Programmer (w/ Webpack, Babel and React)
 
Opencart購物車-商品上架教學
Opencart購物車-商品上架教學Opencart購物車-商品上架教學
Opencart購物車-商品上架教學
 
OpenCart模板規劃教學
OpenCart模板規劃教學OpenCart模板規劃教學
OpenCart模板規劃教學
 
WordPress shortcode應用教學
WordPress shortcode應用教學WordPress shortcode應用教學
WordPress shortcode應用教學
 
Sublime 外掛安裝教學
Sublime 外掛安裝教學Sublime 外掛安裝教學
Sublime 外掛安裝教學
 
How I learn APP (2015)
How I learn APP (2015)How I learn APP (2015)
How I learn APP (2015)
 
JavaScript 從零開始
JavaScript 從零開始JavaScript 從零開始
JavaScript 從零開始
 
Open Cart 模組架站教學
Open Cart 模組架站教學Open Cart 模組架站教學
Open Cart 模組架站教學
 
Sublime Text 入門
Sublime Text 入門Sublime Text 入門
Sublime Text 入門
 
Sublime text 極速應用教學
Sublime text 極速應用教學Sublime text 極速應用教學
Sublime text 極速應用教學
 
前端界流傳的神奇招式
前端界流傳的神奇招式前端界流傳的神奇招式
前端界流傳的神奇招式
 

Similar to 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)Joseph Chiang
 
YUI is Sexy - 使用 YUI 作為開發基礎
YUI is Sexy - 使用 YUI 作為開發基礎YUI is Sexy - 使用 YUI 作為開發基礎
YUI is Sexy - 使用 YUI 作為開發基礎Joseph Chiang
 
Kissy design
Kissy designKissy design
Kissy designyiming he
 
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Joseph Chiang
 
YUI介绍和使用YUI构建web应用
YUI介绍和使用YUI构建web应用YUI介绍和使用YUI构建web应用
YUI介绍和使用YUI构建web应用Adam Lu
 
前端杂乱分享
前端杂乱分享前端杂乱分享
前端杂乱分享shyboyzk
 
Yui rocks
Yui rocksYui rocks
Yui rocksAdam Lu
 
YUIconf2010介绍
YUIconf2010介绍YUIconf2010介绍
YUIconf2010介绍ling yu
 
SeaJS 那些事儿
SeaJS 那些事儿SeaJS 那些事儿
SeaJS 那些事儿lifesinger
 
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架fangdeng
 
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架wtxidian
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Gelis Wu
 
校園共筆應用 20070725
校園共筆應用 20070725校園共筆應用 20070725
校園共筆應用 20070725Planetoid Hsu
 
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Wade Huang
 
Node js实践
Node js实践Node js实践
Node js实践myzykj
 
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京Joseph Chiang
 
Js高级技巧
Js高级技巧Js高级技巧
Js高级技巧fool2fish
 
Uliweb比较与实践 2013
Uliweb比较与实践 2013Uliweb比较与实践 2013
Uliweb比较与实践 2013modou li
 
Backbone js and requirejs
Backbone js and requirejsBackbone js and requirejs
Backbone js and requirejsChi-wen Sun
 

Similar to YUI 教學 - 前端工程開發實務訓練 (20)

YUI is Sexy (for JSDC.tw)
YUI is Sexy (for JSDC.tw)YUI is Sexy (for JSDC.tw)
YUI is Sexy (for JSDC.tw)
 
YUI is Sexy - 使用 YUI 作為開發基礎
YUI is Sexy - 使用 YUI 作為開發基礎YUI is Sexy - 使用 YUI 作為開發基礎
YUI is Sexy - 使用 YUI 作為開發基礎
 
Kissy design
Kissy designKissy design
Kissy design
 
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練
 
YUI介绍和使用YUI构建web应用
YUI介绍和使用YUI构建web应用YUI介绍和使用YUI构建web应用
YUI介绍和使用YUI构建web应用
 
前端杂乱分享
前端杂乱分享前端杂乱分享
前端杂乱分享
 
Yui rocks
Yui rocksYui rocks
Yui rocks
 
YUIconf2010介绍
YUIconf2010介绍YUIconf2010介绍
YUIconf2010介绍
 
SeaJS 那些事儿
SeaJS 那些事儿SeaJS 那些事儿
SeaJS 那些事儿
 
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架
 
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
 
2021laravelconftwslides8
2021laravelconftwslides82021laravelconftwslides8
2021laravelconftwslides8
 
校園共筆應用 20070725
校園共筆應用 20070725校園共筆應用 20070725
校園共筆應用 20070725
 
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有
 
Node js实践
Node js实践Node js实践
Node js实践
 
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京
 
Js高级技巧
Js高级技巧Js高级技巧
Js高级技巧
 
Uliweb比较与实践 2013
Uliweb比较与实践 2013Uliweb比较与实践 2013
Uliweb比较与实践 2013
 
Backbone js and requirejs
Backbone js and requirejsBackbone js and requirejs
Backbone js and requirejs
 

More from Joseph Chiang

不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会Joseph Chiang
 
Automatic Functional Testing with Selenium and SauceLabs
Automatic Functional Testing with Selenium and SauceLabsAutomatic Functional Testing with Selenium and SauceLabs
Automatic Functional Testing with Selenium and SauceLabsJoseph Chiang
 
Git - The Social Coding System
Git - The Social Coding SystemGit - The Social Coding System
Git - The Social Coding SystemJoseph Chiang
 
分享無名小站 API
分享無名小站 API分享無名小站 API
分享無名小站 APIJoseph Chiang
 
yui3 is Sexy - 使用 YUI 3 的 Sexy Part !
yui3 is Sexy - 使用 YUI 3 的 Sexy Part !yui3 is Sexy - 使用 YUI 3 的 Sexy Part !
yui3 is Sexy - 使用 YUI 3 的 Sexy Part !Joseph Chiang
 
建立前端開發團隊 - 2011 中華電信訓練所版
建立前端開發團隊 - 2011 中華電信訓練所版建立前端開發團隊 - 2011 中華電信訓練所版
建立前端開發團隊 - 2011 中華電信訓練所版Joseph Chiang
 
不用不可之 Fiddler Debugging Proxy!
不用不可之 Fiddler Debugging Proxy!不用不可之 Fiddler Debugging Proxy!
不用不可之 Fiddler Debugging Proxy!Joseph Chiang
 
Front-end Modular & Autmomated Development
Front-end Modular & Autmomated Development Front-end Modular & Autmomated Development
Front-end Modular & Autmomated Development Joseph Chiang
 
建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)Joseph Chiang
 
Hack Day Sharing at D-Link
Hack Day Sharing at D-LinkHack Day Sharing at D-Link
Hack Day Sharing at D-LinkJoseph Chiang
 
桃園農工講「跑步環島」
桃園農工講「跑步環島」桃園農工講「跑步環島」
桃園農工講「跑步環島」Joseph Chiang
 

More from Joseph Chiang (16)

不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会
 
Let's Redux!
Let's Redux!Let's Redux!
Let's Redux!
 
Automatic Functional Testing with Selenium and SauceLabs
Automatic Functional Testing with Selenium and SauceLabsAutomatic Functional Testing with Selenium and SauceLabs
Automatic Functional Testing with Selenium and SauceLabs
 
JavaScript Promise
JavaScript PromiseJavaScript Promise
JavaScript Promise
 
F2E for Enterprise
F2E for EnterpriseF2E for Enterprise
F2E for Enterprise
 
Git - The Social Coding System
Git - The Social Coding SystemGit - The Social Coding System
Git - The Social Coding System
 
miiiCasa is Fun
miiiCasa is FunmiiiCasa is Fun
miiiCasa is Fun
 
分享無名小站 API
分享無名小站 API分享無名小站 API
分享無名小站 API
 
yui3 is Sexy - 使用 YUI 3 的 Sexy Part !
yui3 is Sexy - 使用 YUI 3 的 Sexy Part !yui3 is Sexy - 使用 YUI 3 的 Sexy Part !
yui3 is Sexy - 使用 YUI 3 的 Sexy Part !
 
建立前端開發團隊 - 2011 中華電信訓練所版
建立前端開發團隊 - 2011 中華電信訓練所版建立前端開發團隊 - 2011 中華電信訓練所版
建立前端開發團隊 - 2011 中華電信訓練所版
 
不用不可之 Fiddler Debugging Proxy!
不用不可之 Fiddler Debugging Proxy!不用不可之 Fiddler Debugging Proxy!
不用不可之 Fiddler Debugging Proxy!
 
Open platform
Open platformOpen platform
Open platform
 
Front-end Modular & Autmomated Development
Front-end Modular & Autmomated Development Front-end Modular & Autmomated Development
Front-end Modular & Autmomated Development
 
建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)
 
Hack Day Sharing at D-Link
Hack Day Sharing at D-LinkHack Day Sharing at D-Link
Hack Day Sharing at D-Link
 
桃園農工講「跑步環島」
桃園農工講「跑步環島」桃園農工講「跑步環島」
桃園農工講「跑步環島」
 

YUI 教學 - 前端工程開發實務訓練

  • 1. 1 YUI Library 前端工程開發實務訓練 (4/8) 講師:蔣定宇 / josephj Copyright © 2012 FITPI. All rights reserved.
  • 2. 2 Why YUI? ๏ 幫助了解 JavaScript。 ๏ 一致的物件導向基礎。 ๏ 自訂事件介面。 ๏ 完整 Software Stacks。 ๏ 模組與 Loader 架構。 ๏ 與 Node.js 整合。 ๏ 非社群、有公司資源開發跟品質管理。 Copyright © 2012 FITPI. All rights reserved.
  • 3. 3 Why not YUI? ๏ 知名度跟普及率較差。 ๏ 語法較複雜、不直覺、門檻較高。 ๏ 與 Yahoo! 有關聯。 Copyright © 2012 FITPI. All rights reserved.
  • 4. 4 整體來說 YUI 提供了團隊開發的重要基礎 物件導向、模組化、Loader、自訂事件等 對程式碼的一致性、擴充幫助非常大 搞懂架構之後,用任何東西都會比別人有 Sense! Copyright © 2012 FITPI. All rights reserved.
  • 5. 5 YUI 的架構 模組 / 載入器 Copyright © 2012 FITPI. All rights reserved.
  • 6. 6 模組化 Modularization 將功能分門別類、要用的時候挑選組合 http://www.flickr.com/photos/bdesham/2432400623 Copyright © 2012 FITPI. All rights reserved.
  • 7. 7 NASA 國際太空站 除了樂高積木、國際太空站也是模組化的好範例 Copyright © 2012 FITPI. All rights reserved. http://www.flickr.com/photos/nasamarshall/4546245011/
  • 8. 8 NASA 國際太空站 由 7 個不同國家所提供的 50 多個模組 Copyright © 2012 FITPI. All rights reserved. http://astronomy.wikia.com/wiki/ International_Space_Station
  • 9. 9 模組化的好處 舉凡建築、航太、機械、硬體到軟體 在任何分工精細的工程領域 模組化開發是必然趨勢 「採用既有模組、避免重新打造輪子」 Copyright © 2012 FITPI. All rights reserved.
  • 10. 10 最基本的 JS 模組化 <script src="jquery-1.7.2.js"></script> // 核心函式庫 <script src="jquery.ui.core.js"></script> // 模組 1 <script src="jquery.ui.widget.js"></script> // 模組 2 <script src="jquery.ui.accordion.js"></script> // 模組 3 開發小網站這樣做沒問題,但稍微複雜的就不適合了 全域變數、維護性、前後順序、模組效率問題 Copyright © 2012 FITPI. All rights reserved.
  • 11. 11 YUI 模組架構 當覺得程式太多、需重複使用,切分模組會是很棒的作法 對於使用者來說、不用為了一個小功能把一堆東西拉近來 所有 YUI 模組檔案皆必須以這樣的方式包覆: editor.js YUI.add("模組名稱", function (Y) { editor // 上方的參數 Y 代表了 YUI 的 Instance          function Editor() { Why callback?         // 這是物件的建構式 放到頁面上時不會立即執行、     }              等到要用時再執行即可。好處     // 將建構式提昇到 Global 是做程式碼的隔離、不再需要     Y.Editor = Editor; 處理每個模組間的先後順序。      }, requires:["所需模組 1", "所需模組 2"]);   Copyright © 2012 FITPI. All rights reserved.
  • 12. 12 使用 YUI 模組 對使用者來說、只需指定模組名稱即可使用 YUI().use("editor", function (Y) {          // 此 Callback 代表所需模組皆已載入完成         // 你就可以直接建立 Y.Editor 的例項          var editor = new Y.Editor();      }); Copyright © 2012 FITPI. All rights reserved.
  • 13. 其他選擇 - RequireJS 13 目前除了 YUI,尚未有其他函式庫內建模組化 但 RequireJS 可以做到「從零開始」 // YUI Module // AMD Module YUI.add("editor", function () { define(function () {     function Editor { /* Constructor */ }     function Editor { /* Constructor */ }     Y.Editor = Editor;         return Editor; }); }); YUI.use("editor", function (Y) { require(["editor"], function (Editor) {     new Y.Editor();     new Editor(); }); }); 概念幾乎一樣,但 YUI 已經有豐富的模組 RequireJS 則只是個架構,你要自己把模組加進去 Copyright © 2012 FITPI. All rights reserved.
  • 14. 14 模組名稱與載入 新手大多只要負責「用」模組即可 需大家理解「模組是 YUI 的最小單位」 要用任何功能,你必須知道模組的名稱: YUI 的所有模組列表 http://yuilibrary.com/yui/docs/yui/modules.html 一個模組通常就是一個檔案 所以模組化的缺點是... 檔案會變多! 背後也需要有機制解決 Request 數量的問題 Copyright © 2012 FITPI. All rights reserved.
  • 15. 15 練習:YUI 模組 http://f2eclass.com/lab/yui/module.html // 新增一個 YUI 模組 YUI.add("模組名稱", function () { // 模組內容 },"自定版號", {requires:["相依模組1"]}); ๏ 已經存在一個 class 模組,內有 Y.Class 介紹基本資訊及 getStudents 的函式。 ๏ 請利用 YUI.add 新增一個 fitpi 模組 ,裡面需定義學生名稱列表 (Y.Class.students) 並指定相依模組。 ๏ 最後 YUI().use 指定 fitpi 並呼叫 Y.Class.getStudents 函式。 Copyright © 2012 FITPI. All rights reserved.
  • 16. 載入器 Loader 有效率地載入所需要的的 CSS 與 JavaScript 檔案 http://www.flickr.com/photos/bdesham/2432400623 16
  • 17. 小網頁不需考慮載入問題 17 在初期、所需的 JS 與 CSS 都很小 jQuery - 32K <script src="http://code.jquery.com/jquery-1.4.2.min.js"></script> 可做很多事! http://www.flickr.com/photos/halfbisqued/2353845688/ Copyright © 2012 FITPI. All rights reserved.
  • 18. 網站必需考慮載入方式 18 發展到一定規模,該如何選擇每頁所需的檔案呢? 天哪!我該如何處理 這麼多的 CSS / JS 檔案? 模組化會切分出很多檔案,如何管理及載入是一門學問 http://www.nipic.com/show/2/55/d96dde66860c5190.html Copyright © 2012 FITPI. All rights reserved.
  • 19. 較差的載入方式 19 效能及維護性問題 較不專業的網站在面對這樣的問題 都是純手工一頁一頁寫、或者是打成一大包 得考慮先後順序、維護性低、也無法最佳化 Copyright © 2012 FITPI. All rights reserved.
  • 20. YUI 內建載入機制 20 YUI 的 Loader 機制 協助載入零散且多的模組檔案 http://www.flickr.com/photos/billjacobus1/123644872/ Copyright © 2012 FITPI. All rights reserved.
  • 21. YUI 模組載入機制 21 以 YUI DataTable 為範例 (datatable 模組) 不 reload 的行為很多:換 頁、排序、直接編輯。也可 以有各種資料來源,是個很 複雜的模組。 Copyright © 2012 FITPI. All rights reserved.
  • 22. 22 YUI 模組載入機制 只要幾行程式碼就可以載入所需模組 <script src="http://yui.yahooapis.com/3.7.3/build/yui/yui-min.js"></script> <script> YUI().use("datatable", function (Y) {          alert(Y.DataTable); }); </script> 能想像 6 行程式碼背後、做了多少事嗎 ? Copyright © 2012 FITPI. All rights reserved.
  • 23. 計算相依模組的過程 23 arraylist yui-base pluginhost event-synthetic attribute-core attribute-events model event-delegate attribute-extras array-extras array-invoke json-parse escape node-base base-plugin-host node-style model-list base-base event-focus view node-event-delegate classnamemanager attribute datatable-core datatable-head datatable-body base-build widget yui (Seed) YUI().use('datatable') Copyright © 2012 FITPI. All rights reserved.
  • 24. 24 Combo Handler 強大的壓縮機 YUI().use('datatable') 前一頁只列出了 28 個模組,但實際上會有 64 個 64 個模組就代表了 64 個檔案、 你可能會覺得很誇張 但模組化就是要把不相干的程式抽離、盡可能精簡 YUI 的 Combo Handler 可把數量的問題徹底解決 http://yui.yahooapis.com/combo? <模組1的 案路徑>& <模組2的 案路徑>& ... Copyright © 2012 FITPI. All rights reserved.
  • 25. 25 超自動化的平行載入機制 YUI().use('datatable') 你所引用的 YUI 種子檔 先載入相關 CSS 將所需 YUI 模組分散成 3 個請求、平行下載 分散的邏輯:「檔案總數量」、「瀏覽器同時請求數量」、「瀏覽器 GET 長度的限制」 Copyright © 2012 FITPI. All rights reserved.
  • 26. 26 YUI 載入效能 從種子變成大樹只花了 323 ms YUI().use('datatable') 323ms 是一棵完全沒有贅肉的大樹、因 Module 的切分非常的細、用不到的絕不載入 Copyright © 2012 FITPI. All rights reserved.
  • 27. 27 連 jQuery 作者都說... YUI().use() + pulling code off of Yahoo's CDN is damn sexy and should be promoted *VERY* heavily. YUI 自動載入函式庫的方式實在 太 Sexy 了、應該被大力推廣 The creator of jQuery John Resig http://www.quora.com/How-could-YUI3-improve-its-image-compared-to- jQuery-MooTools-etc Copyright © 2012 FITPI. All rights reserved.
  • 28. 28 練習:Loader http://f2eclass.com/lab/yui/loader.html 這個練習只要按 F12、選取 Network (網路) 觀看 YUI 的 request 即可 <script type="text/javascript" src="http://yui.yahooapis.com/3.7.3/build/yui/yui-min.js"></script> <script> YUI().use("datatable", function (Y) {     Y.log(Y.DataTable);     alert("已經載入 datatable 模組"); }); </script> Copyright © 2012 FITPI. All rights reserved.
  • 29. 29 YUI 官網介紹 http://yuilibrary.com Copyright © 2012 FITPI. All rights reserved.
  • 30. 30 YUI 官網介紹 ๏ Quick Start 新手上路 ๏ User Guides 分門別類列出 YUI 官方所有內容 ๏ Getting Started 針對一個模組的介紹 ๏ API Documentation 列出一個模組的所有屬性、方法、事件 ๏ Module 大致了解模組的分法 http://yuilibrary.com/yui/docs/yui/modules.html Copyright © 2012 FITPI. All rights reserved.
  • 31. 31 User Guides 列出 YUI 所包含的所有東西 無介面的 JS 功能 CSS 工具 基本 DOM Event 元件架構 有介面的 JS 控制項 測試及除錯工具 Copyright © 2012 FITPI. All rights reserved.
  • 32. 32 YUI Core 用 YUI 處理 JavaScript 的 DOM 與 Event Copyright © 2012 FITPI. All rights reserved.
  • 33. 33 YUI 使用方式 建議放置位置:</body> 前 <script src="http://yui.yahooapis.com/3.7.3/build/yui/yui-min.js"></script> 模組1, 模組2, 模組3... 模組n <script> YUI().use("node", "event", function (Y) { 有 YUI 的 Instance 可用           }); 模組載入完畢所執行的函式 </script> Copyright © 2012 FITPI. All rights reserved.
  • 34. 34 node - 存取節點 用 CSS 選取器取得節點 Y.all(); ๏ 取得一個 .restaurant 節點 Y.one(); var node = Y.one(".restaurant"); ๏ 取得所有 li <div id="article"> var nodes = Y.all("li"); <h1>新店市好吃的餐廳</h1> <ul class="restaurant"> ๏ 取得第 5 個 li <li>可愛村便當:台北縣新店市大豐街8號</li> <li>阿輝現炒黃牛肉:台北縣新店市中興路三段225號</li> var nodes = Y.one("li:nth-child(5)"); <li>黑人牛肉麵:台北縣新店市中興路三段176號</li> <li>蘇杭:台北縣新店市民權路25號2F</li> <li>王家包子:台北縣新店市國校路25號之1</li> <li>辣。四川成都小炒:台北縣新店市吉安路2-1號</li> 取得的節點可以再去取節點 <li>山東餃子館:台北縣新店市中央路133巷19號1樓</li> <li>樂陶然健康小火鍋:台北縣新店市中央五街2號</li> ๏ 取得一個 #article 節點 <li>六六火鍋:台北縣新店市中央路89號</li> <li>龍門客棧:台北縣新店市中央路98號之1</li> var node = Y.one("#article"); ๏ 取得 #article 下面的所有 li 節點 <li>麵對麵:台北縣新店市中央路33號</li> </ul> </div> var itemNodes = node.all("li"); 練習 - http://f2eclass.com/lab/yui/node.html Copyright © 2012 FITPI. All rights reserved.
  • 35. 35 node - 存取節點 ๏ get() / set() 取得 / 設定屬性 ๏ addClass() / replaceClass() / removeClass() / toggleClass() ๏ getHTML() / setHTML 取得 / 更新內容 ๏ getStyle() / setStyle() 取得 / 設定樣式 ๏ ancestor() 取得母節點 ๏ append() / remove() 新增子節點 / 刪除節點 ๏ 更多介紹:http://yuilibrary.com/yui/docs/node/ 練習 - http://f2eclass.com/lab/yui/node2.html Copyright © 2012 FITPI. All rights reserved.
  • 36. 36 event - 綁定事件 ๏ on(<事件名稱>, <處理函式>) ๏ e.stopPropagation() 停止氣泡事件 ๏ e.preventDefault() 停止預設行為 ๏ delegate() 委任 ๏ fire() 觸發自訂事件 ๏ 更多介紹:http://yuilibrary.com/yui/docs/event/ Copyright © 2012 FITPI. All rights reserved.
  • 37. 37 練習:node/event http://f2eclass.com/lab/yui/node-event.html ・利用 Y.delegate 綁事件 ・Y.delegate("click", <函式>, <選擇器>); ・點擊滑鼠把 li 變成黃色 ・<node>.addClass("highlight"); ・雙重點擊 dblclick 把 li 給刪除 ・<node>.remove(); ・刪除完畢觸發一個事件 ・Y.fire("deleted", <餐廳名稱>); Copyright © 2012 FITPI. All rights reserved.
  • 38. 38 YUI Anim 動畫 Copyright © 2012 FITPI. All rights reserved.
  • 39. 39 練習:Y.Anim http://f2eclass.com/lab/yui/anim.html ๏ var anim = new Y.Anim(<設定物件>); ๏ 屬性 from (Object) - 動畫開始時 ๏ 屬性 to (Object)- 動畫結束時 ๏ 屬性 duration (Number) - 總共秒數 ๏ 屬性 easing (String) - 效果 ๏ 函式 anim.run(); ๏ 事件 end Copyright © 2012 FITPI. All rights reserved.
  • 40. 40 YUI IO AJAX - Web 2.0 的基礎 Copyright © 2012 FITPI. All rights reserved.
  • 41. 41 傳統網頁更新方式 每一次都是整頁重新整理,但可能只需小部分更新 傳統流程: 2. 伺服器處理 Request 使用者瀏覽器 1. 發出 Request A 網站 3. 伺服器回傳 伺服器 A 網站 4. 整份網頁重新整理 Copyright © 2012 FITPI. All rights reserved.
  • 42. 42 AJAX 網頁更新方式 只從伺服器上載入所要更新的資料、而非整頁 AJAX流程: 2. 伺服器處理 Request 使用者瀏覽器 1. 用 JavaScript 發出 Request A 網站 3. 伺服器回傳 伺服器 A 網站 4. 只有小部分更新 Copyright © 2012 FITPI. All rights reserved.
  • 43. 43 練習:Y.io http://f2eclass.com/lab/yui/io.html ๏ 放在伺服器端同一個目錄下的檔案: http://f2eclass.com/lab/yui/io.txt ๏ 發出請求: Y.io(<url>); ๏ 伺服器回應:Y.on("io:complete", function (id, o) {}); ๏ 更簡單的作法:<Node>.load(<url>); 即可將資料塞入節點中。 ๏ 更多資料:http://yuilibrary.com/yui/docs/io/ Copyright © 2012 FITPI. All rights reserved.
  • 44. 44 Y.JSONP 存取跨網域的資料 資料存取有個叫 Same Origin Policy 的限制 JavaScript 是不能存取目前網域以外的資料的 JSONP 是利用 JS 可被跨域嵌入的特性而實作的 Copyright © 2012 FITPI. All rights reserved.
  • 45. 常用於網站資料交換 45 找不到 JSON Copyright © 2012 FITPI. All rights reserved.
  • 46. JSONP 就是外部 JS! 46 改為 JSON 設定函式名稱 <script src="http://api.flickr.com/services/feeds/photos_public.gne? tags=f2e&lang=en-us&format=json&jsoncallback=getData "></script> Copyright © 2012 FITPI. All rights reserved.
  • 47. 練習:Y.jsonp 47 取得跨網域資料 ๏ 練習網址: http://f2eclass.com/lab/yui/jsonp.html ๏ 利用 Flickr 提供的 API 介面 ❖ http://www.flickr.com/photos/tags/<關鍵字> ❖ http://api.flickr.com/services/feeds/photos_public.gne?tags=<關鍵字>&lang=en- us&format=json&jsoncallback={callback} ๏ Y.jsonp(<URL>, <回傳函式>); ๏ 在回傳函式中把所需 HTML 組出來 ๏ 更多資料:http://yuilibrary.com/yui/docs/jsonp/ Copyright © 2012 FITPI. All rights reserved.
  • 48. 48 Y.Handlebars 將 HTML 的組合從 JavaScript 中分離出來 JSONP 的範例中我們必須在 JS 中組合 HTML 十分的不好寫,也不符合網頁標準化的精神 Handlebars 是專門解決此問題的樣板系統 Copyright © 2012 FITPI. All rights reserved.
  • 49. 49 練習:Y.Handlebars ๏ 練習網址: http://f2eclass.com/lab/yui/handlebars.html ๏ YUI().use('handlebars'); ๏ 樣板: <script type="text/x-handlebars-template">...</script> ๏ 編譯:template = Y.Handlebars.compile(<HTML>); ๏ 輸出:template(<data>); ๏ 更多:http://yuilibrary.com/yui/docs/handlebars/ Copyright © 2012 FITPI. All rights reserved.
  • 50. 50 YUI Panel Web 2.0 的「開新視窗」 過去我們用 window.open 開小視窗 但現在都是直接開一層 <div/> 直接浮在頁面上 Copyright © 2012 FITPI. All rights reserved.
  • 51. 51 YUI 視窗 Copyright © 2012 FITPI. All rights reserved.
  • 52. 練習:YUI Panel 52 http://f2eclass.com/lab/yui/panel.html ๏ body 增加 .yui3-skin-sam 的 class ๏ 指定 YUI().use 的模組為 panel ๏ new Y.Panel(屬性值); Copyright © 2012 FITPI. All rights reserved.
  • 53. 53 Panel 所提供的屬性 centered 是否要置中對齊 modal 是否為獨佔模式 visible 預設是否顯示 width 視窗的寬度 height 視窗的高度 Copyright © 2012 FITPI. All rights reserved.
  • 54. 54 課程回顧 ๏ YUI 的優缺點、及它的的架構:模組化、 載入器、物件導向開發 (進階再提) ๏ YUI 的官網如何使用。 ๏ YUI 的核心函式庫:Node 與 Event,補 足了瀏覽器的不足。 ๏ YUI 的函式庫工具、控制項該如何使用。 Copyright © 2012 FITPI. All rights reserved.
  • 55. 55 Q&A Copyright © 2012 FITPI. All rights reserved.