Yahoo! UI Library 的介紹

Yui組件分成2類:工具包和控件庫

Yui 工具包

Yui 工具包利用DOM腳本來簡化瀏覽器內的開發(in-browser devolvement),使用DHTML和AJAX的特性開發所有的Web程序。

         1)動畫(Animation):在你的頁面中通過指定位置,大小,透明度或者頁面元素的其他特性來創建一個"電影效果(cinematic effects)"。這些效果將在你的頁面發生變化的時候給用戶更好的體驗。

         2)連接管理(Connection Manager):這個工具包幫助你管理XMLHttpRequest(一般被稱爲AJAX)事務,它提供對錶單提交(form posts),錯誤捕獲(error handling)和callbacks的全面支持。該工具包也支持文件的上傳管理。

DOM:DOM工具包提供更簡單的DOM腳本的功能調用方式,包含元素的位置和CSS樣式的管理。

拖放(Drag and Drop):創建可拖放的對象。爲了提供豐富的交互功能(比如拖動一個對象到目標位置)你可能需要編寫很多代碼。這個工具包可以在所有支持的瀏覽器中捕獲所有的操作事務並保證其穩定地運行。

        3)事件(Event):這個神奇的管理類庫給你提供一種簡單安全的方法訪問瀏覽器的事件(比如點擊和鍵盤操作)。這個事件封包中還包含了自定義事件對象,它爲你的程序交互提供一種發佈和訂閱事件的機制。

yui控件:

yui控件庫爲你頁面提供一組高交互性性的可視化元素。這些元素完全在客戶端創建維護,不需要請求服務器進行頁面刷新。

這些控件包括:

         1)自動完成(AutoComplete)控件:自動完成控件爲文本輸入提供一種漸進式的用戶體驗(streamline user interactions)。控件會提供相似項列表和基於多樣化的數據格式的提前鍵入功能(type-ahead functionality based on a variety of data-source formats),並且可以通過XMLHttpRequest訪問服務端的數據。

         2)日曆(Calendar)控件:一個用來日期選擇的動態圖形控件。

          3)容器(Container)控件:一組模仿windows樣式的控件,他們包括Tooltip, Panel, Dialog 和 SimpleDialog。其中Module 和 Overlay控件提供一個可擴展的平臺,你可以控制自定義的模仿windows樣式的控件。

          4)日誌(Logger)控件:提供一個快速和簡單的記錄日誌的方式,它直接將日誌信息輸出到屏幕控制檯(on-screen console)、Firefox的擴展組件FireBug,或者Safari的Javascrīpt控制檯。yui的Debug組件將完整的記錄輸出信息和調試信息。

         5)菜單(Menu)控件:利用此控件只需要幾行簡單的代碼就可以設計一個動態樣式的菜單。可以完全使用javascrīpt構造一個菜單,can be layered on top of semantic unordered lists。

         6)滑塊(Slider)控件:提供一個可滑動的組件,它允許使用者在一定的範圍內(x軸,y軸)改變滑塊的位置。

          7)樹形(TreeView)控件:提供一個節點可縮放的樹形控件。節點可以是鏈接,自定義屬性,並且可以動態加載。節點元素的展現可以通過CSS修改,比如文件夾視圖,TO-DO任務列表或者其他可視化處理

 

 

1.           YAHOO工具庫

1.1.    YAHOO工具庫提供的方法

  l        namespace

        用於創建一個全局的命名空間,使用YUI時,首先會自動創建widget,util,example三個命名空間,使用時也可以自定義命名空間。類似於在程序中建了了一個static變量。

  l        lang

           javascript擴展的語言工具,用於判別對象的類型。

  l        lang.extend

        用於從一個對象上擴展出另一個對象,模擬了類的繼承的方式,但不同的是,在創建子對象時,父對象的構造函數不會自動調用。父對象的引用存放在了子對象的supperclass中,構成了一個鏈狀繼承關係。在2.2.2的版本中,YAHOO.lang.extendYAHOO.extend指向同一函數對象。

  l        lang.augment

        將一個對象的屬性(部分或全部)複製到另一個對象,但並非真正意義上的複製,只是一種引用。YAHOO.augment=YAHOO.lang.augment

  l        log

        用來調試的一個工具,將信息顯示到log控件。

  l        env

       環境信息和YUI組件信息

  l        YUI_config.listener

       可以定義自己的回調函數,當有新的YUI組件加載到頁面時將會調用YUI_config.listener指向的函數。

 

2.           YUI提供的Dom操作

特點:對於大部分DOM操作提供了批量操作的功能,而對用戶只需使用統一的函數接口就能完成單個或批量的操作,主要得益於DOM內部的batch方法。

 

     2.1.    Element的查找

         YAHOO.util.Dom.get(element)

      調用document.getElementById(element),獲取指定的頁面元素。 

        YAHOO.util.Dom.getElementsBy(method,tagName,rootNode)

     在rootNode的子節點中按照用戶提供的method方法在所有標籤爲tagNameelement中查找符合條件的節點。rootNode不指定則在整個Document中查找,method是一個method(elementID)類型的函數對象,該函數對象的返回值爲Boolean值。

          YAHOO.util.Dom.getElementsByClassName(className, tagName, rootNode)

     返回指定根節點下所有標籤爲tagName,classclassNameDOM節點數組。根節點爲可選參數,不指定時在整個頁面中查找

          YAHOO.util.Dom.inDocument (el)

     判斷元素el是否在當前的DOM中,支持批量操作。 

     2.2.    樣式控制和訪問

        YAHOO.util.Dom.hasClass(element, className)

        判斷element標籤上是否指明瞭classNameclass,支持批量操作

        YAHOO.util.Dom.addClass(element, className)

       給指定標籤增加名爲classNameclass,支持批量操作.

        YAHOO.util.Dom.removeClass(element, className)

       刪除element上的名爲classNameclass,支持批量操作

        YAHOO.util.Dom.replaceClass(element, oldClassName, newClassName)

       替換element上的oldClassName樣式爲newClassName,支持批量操作

        YAHOO.util.Dom.getStyle(element, property)

       獲取elementstyle中的property屬性,支持批量操作

        YAHOO.util.Dom.setStyle(element,property,pValue)

       設置elementstyleproperty屬性爲pValue,支持批量操作

 

       注:本節中的class指的是CSS中定義的class 

    2.3.    位置控制和訪問

       位置控制的相關函數

              YAHOO.util.Dom.setX

              YAHOO.util.Dom.setY

              YAHOO.util.Dom.setXY

              YAHOO.util.Dom.getX

              YAHOO.util.Dom.getXY   返回元素座標 [ left,top ]

              YAHOO.util.Dom.getRegion

       獲取元素的座標Region對象{left,top,right,bottom}

       可支持批量操作

 

       獲取頁面可視面積的高度和寬度

              YAHOO.util.Dom.getClientWidth

              YAHOO.util.Dom.getClientHeight

        獲取Document的高度和寬度

              YAHOO.util.Dom.getDocumentWidth

              YAHOO.util.Dom.getDocumentHeight

        獲取頁面可視區域的高度和寬度(不包含滾動條)

              YAHOO.util.Dom.getViewportHeight

              YAHOO.util.Dom.getViewportWidth

       YUI提供的一個對象,用於完成多個矩形區域間的計算(如相交,包含)。

              Region對象:{left,top,right,bottom}

       判斷是否包含了region區域

              YAHOO.util.Region.contains(region)

       計算面積

              YAHOO.util.Region.getArea

       計算與region區域的交迭區域

              YAHOO.util.Region.intersect(region)

       計算與region區域求並集(即包含兩個區域的最小區域)

              YAHOO.util.Region.union(region)

       YUI提供的對象,用於定義座標點。

              Point對象:{x,y}

 

       3.           YUI提供的element工具

             YUI提供了一組操作頁面element的工具,是對標準HTML elements的一種封裝,能夠直接通操作element的實例,使得增加監聽器,操作DOM,設置/獲取element的屬性等工作變得很簡單。部分方法是直接調用YUIDOM工具集提供的方法,如對class操作的相關方法、獲取element的相關方法等等,在此不再重複。

            YAHOO.util.Element(elementId)

            創建element,如果elementIdDocument中還不存在,仍然可以通過YUI對他進行屬性設置,增加監聽器等操作, Element工具集會自動等到該elementId可用後執行這些操作,實際上真正的操作是等到contentReady事件發生後才進行的。

 

            YAHOO.util.Element.appendChild(child)

            DOM結構中element下增加子節點

 

            YAHOO.util.Element.getElementsByTagName(tag)

            獲取tagNametag的所有頁面元素

 

            YAHOO.util.Element.hasChildNodes

            判斷是否具有子節點

 

            YAHOO.util.Element.insertBefore(element, before)

            在元素before前插入element

 

            YAHOO.util.Element.removeChild(child)

            刪除DOM中元素的child子節點

 

            YAHOO.util.Element.replaceChild (newNode , oldNode)

            替換子節點oldNodenewNode

4.           YUI提供的Event工具集

            YUI提供的Event工具集簡化了瀏覽器中事件驅動程序的編寫,提供了一種簡單的接口來定製事件和檢查瀏覽器中的event對象。YUI事件工具集提供了自定義事件對象(Custom Event),通過自定義事件對象可以發佈自己感興趣的時刻或事件,頁面中的YUI組件能夠響應這些自定義的事件並做出迴應。

            YUI對事件響應的順序:通過YUI Event工具集添加的事件,默認是在冒泡過程中執行事件處理函數的。從DOM節點上來說,是從子節點向根節點響應事件。

                Event需要的引入

               <!-- Dependency -->

               build/yahoo/yahoo-min.js

               <!-- Event source file -->

               build/event/event-min.js

               EventCustom Event分別定義在YAHOO.util.EventYAHOO.util.CustomEvent

              Event工具集提供的方法

             1) YAHOO.util.Event.addListener(element,eventType,fn,obj,override)

                  參數:

                  element:爲綁定事件的元素id可以是一個數組,以支持批量操作

                  eventType:爲事件類型

                  fn:爲事件響應的回調函數

                  obj:當overridetrue時,爲回調函數傳入的參數對象;當overridefalse時,該參數被忽略。

                  override

                  返回值類型:Boolean

                  功能:給指定的element綁定事件響應函數

              2) YAHOO.util.Event.removeListener:function(element,eventType,fn)

                  參數:

                  element:爲綁定事件的元素id,

                  eventType:事件類型

                  fn:爲事件響應函數

                  返回值類型:Boolean

                  功能:給指定的element解除綁定事件

 

              3)YAHOO.util.Event.purgeElement ( el , recurse , sType )

                  參數:

                  el:爲綁定事件的元素id,

                  recurseBoolean值,是否解除子節點的事件綁定

                  sType:事件類型

                  返回值類型:Boolean

                  功能:給指定的element解除綁定的同一類型的事件,也可以解除子節點上綁定的這一類型的事件

 

              4)YAHOO.util.on

                  addListener的函數別名

 

              5)YAHOO.util.Event.onAvailable ( p_id , p_fn , p_obj , p_override )

                  參數:

                  p_id:爲綁定事件的元素id,

                  p_fn:爲事件響應函數

                  p_obj:同addListenerobj參數

                  p_override:同addListeneroverride參數

                  返回值類型:

                  功能:當指定的elementp_id出現時,執行事件響應函數。如果在頁面初始化之前執行這一函數,當頁面加載時(可能還未完成時),就會執行響應的事件響 應函數;如果放在頁面加載之後執行這一函數,將以固定的時間輪詢,當element可用時響應這一事件。這個輪詢的的時間是可以配置的,缺省的時間是10秒一次。

 

              6)YAHOO.util.Event.onContentReady( p_id , p_fn , p_obj , p_override )

                  參數:

                  p_id:爲綁定事件的元素id,

                  p_fn:爲事件響應函數

                  p_obj:同addListenerobj參數

                  p_override:同addListeneroverride參數

                  返回值類型:

                  功能:onAvailable類似,但不同的是事件響應函數是等到element可以安全的修改的時候才響應。

 

              7)YAHOO.util.Event.onDOMReady ( p_fn , p_obj , p_scope )

                  參數:

                  p_fn:爲事件響應函數

                  p_obj:同addListenerobj參數

                  p_scope:同addListeneroverride參數

                  返回值類型:

                  功能:DOM第一次可用時執行響應函數。

 

              8)YAHOO.util.Event.preventDefault ( event)

                  參數:

                  event:事件對象

                  返回值類型:

                  功能:阻止事件的缺省行爲發生。

 

              9)YAHOO.util.Event.getListeners ( el , sType )

                  參數:

                  elHTML element

                  sType:事件類型,String類型

                  返回值類型:Object{

                  type:事件類型

                   fnaddListener添加的事件響應函數

                   obj:提供給事件響應函數的參數對象

                   adjust:否獲取缺省的事件監聽器

                   indexUI事件監聽器列表中的位置

                  }

                  功能:阻止事件的缺省行爲發生。

 

              10)YAHOO.util.Event.getTime( event)

                  參數:

                  event:事件對象

                  返回值類型:Date對象

                  功能:獲取事件發生時的時間。

 

             11) YAHOO.util.Event.getTarget(ev , resolveTextNode)

                  參數:

                  evt:事件對象

                  resolveTextNode

                  返回值類型: HTML element

                  功能:獲取事件發生時的頁面標籤。對於IEwindow.event.srcElement 

5.           YUI提供的CSS樣式

           5.1.    Fonts

                  字體的規範樣式,需要引入build/fonts/fonts-min.css

           5.2.    Reset

                  規範了所有HTML element的缺省樣式,需要引入build/fonts/reset-min.css

           5.3.    Grids

                  提供了用於頁面排版的CSS樣式,需要引入build/fonts/grids-min.css

6.           YUI組件

           6.1.    Connection Manager

           提供了訪問XMLHttpRequest對象的一個簡單接口

           對象定義:

           YAHOO.util.Connect.asyncRequest

           Connection的引入:

           <!-- Dependency -->

           build/yahoo/yahoo-min.js

           <!—可選項:用到事件時引入 -->

           build/event/event-min.js

           build/connection/connection-min.js

           Connection的使用

           1.    創建對象

               var transaction = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback, null);

                   第一個參數:指明http請求的方式,可用的方式包括GETPOSTHEADPUTDELETE,但PUTDELETE可能在一些A級瀏覽器上不支持。

                   第二個參數:請求的URL

                   第三個參數:回調函數,用於服務器返回數據時調用的客戶端處理程序

                   第四個參數:POST方式時,提供給URLPOST參數信息。

                       []A級瀏覽器A-Grade browsersYUI對瀏覽器的一個等級劃分,具體劃分原則詳見http://developer.yahoo.com/yui/articles/gbs/index.html

           2.    定義回調函數

               l      在異步事物中,可以創建回調函數處理服務器的響應和相關數據,如果你不關心服務器的返回信息,也可以忽略這些回調函數,所有這些回調函數對象都是可選的,然而在大多數情況下,應該至少提供以下三個回調函數:

                   success:服務器做出有效響應時的回調函數

                   failure:服務器響應了但提供了錯誤信息時的回調函數

                   argumentsuccessfailure爲了處理返回信息需要的參數,可以是對象、字符串、數字或者包含了數據的數組。

               l        在使用YAHOO.util.Connect.setForm上載文件時,需要定義upload回調函數代替successfailure

               l        在回調函數中this將失去作用範圍,這種情況下需要通過一個指向父對象的引用的參數來訪問對象的成員。爲了能夠使用對象的方法作爲回調函數,並維持成員的作用範圍,需要定義回調函數對象的成員scope,作爲this的值。

6.2.    Button

           對象定義:YAHOO.widget.Button

         與傳統HTML Form的按鈕類似,不同的是它的label可以與 value不一致。還可以創建帶菜單的按鈕,或者radio buttoncheckbox

           分類:

           可以創建幾種類型的按鈕:

           button:普通的下壓式按鈕,可以在按鈕按下時執行用戶指定的代碼

           link:按下時導航至相應的URL

           submit:作用相當於form的提交按鈕

           reset:formreset按鈕

           checkbox:

           radio:

           menubutton:按下時顯示隱藏按鈕

           splitbutton:按下時執行命令或顯示菜單的按鈕

            使用Button必需的引入:

           <!-- CSS -->

           build/fonts/fonts-min.css

           build/button/assets/button.css

 

           <!-- Dependencies -->

           build/yahoo-dom-event/yahoo-dom-event.js

           build/element/element-beta-min.js

 

           <!—使用menubuttonsplitbutton要用到的 -->

           build/container/container_core-min.js

           build/menu/menu-min.js

 

           <!-- Source file -->

           build/button/button-beta-min.js

           初始化的方式:

           1.使用替換<input><span>的方式

              constructorYAHOO.widget.Button(sourceElementId,{配置集})

           Button的構造器首先根據sourceElementIdDOM中查找<input>,一旦找到,就通過DOM replaceChild方法替換掉<input>

 

           2.使用新建的方式

           constructor:YAHOO.widget.Button({配置集})

           這種情況下根據配置集中指明的父id(Container)創建按鈕,如果配置集中沒有指明按鈕則使用YAHOO.Dom.generateId生成buttonID, 

Button的配置集 

屬性名稱

含義

備註

id

替換後的新的element id

 

label

按鈕上顯示的文字

 

check

按鈕選中/未選中的狀態

checkbox用到

type

指明button的類型

缺省爲button

container

按鈕的父id

使用新建方式時會用到

srcelement

使用替換方式時

 

menu

按鈕對應的菜單YAHOO.widget.menu

 

title

按鈕title

沒有指定label時使用title

href

按鈕導航URL

僅在按鈕類型爲link時有效

target

<a>中的target

僅在按鈕類型爲link時有效

tabindex

tab切換焦點時的順序號

 

onclick

click事件的響應函數

onclick:{
fn: Function, // 事件的響應函數.
obj: Object, // An object to pass back to the handler.
scope: Object // The object to use for the scope of the handler.
}

 

 

 

6.3.    ButtonGroup

       對象定義:YAHOO.widget.ButtonGroup

            ButtonGroup是一組按鈕,同組中只能有一個按鈕被選中。根節點爲<div>

 6.4.    AutoComplete

           用戶在文本輸入框中輸入文字時,該組件通過輸入的內容查找符合輸入條件的內容,並顯示出所有符合條件的內容,供用戶能夠很快的完成正確的輸入。

           AutoComplete的引入

           <!-- 必須引入 -->

           build/yahoo-dom-event/yahoo-dom-event.js

           <!-- 可選: Connection(用到 XHR數據源時需要的引入) -->

           build/connection/connection-min.js

           <!--可選:用到動畫效果時需要的引入 -->

           build/animation/animation-min.js

           <!-- Source file -->

           build/autocomplete/autocomplete-min.js

       控制AutoComplete的配置集 

屬性名稱

含義

備註

animVert

控制下拉框向下展開的動畫效果

 

animHoriz

控制下拉框水平方向展開的動畫效果

 

animSpeed

控制動畫的速度

 

delimChar

一行顯示多條記錄時的分隔符,可以是字符串數組或字符串

 

maxResultsDisplayed

結果集的最大顯示行數

 

minQueryLength

進行查詢前的輸入的字符個數

 

queryDelay

用戶鍵入字符後多少秒開始查詢,默認0.5

 

autoHighlight

查詢出來的結果集顯示後,是否高亮顯示第一條,默認爲true

 

highlightClassName

高亮顯示的樣式名,默認爲yui-ac-highlight

 

prehightlightClassName

鼠標移動到下拉框的一行上時,那一行的樣式,默認爲yui-ac-prehighlight

 

useShadow

下拉框是否有陰影

 

useIFrame

下拉框欠套在一個iframe中,用於解決IE中覆蓋<select>的問題

 

forceSelection

限制輸入內容必須爲查詢結果中的內容,如果不是則輸入內容被刪除

 

typeAhead

是否自動根據查詢結果的第一條補齊到autocomplete

 

allowBrowserAutocomplete

是否允許瀏覽器提供的輸入框記憶功能,默認爲false

 

alwaysShowContainer

是否始終顯示查詢結果的下拉框,默認爲false

 

 AutoComplete的使用

           1)         自定義事件(CustomEvent)

           AutoComplete除了默認的事件外,還有自定義的事件,以下爲AutoComplete用到的各種CustomEvent

 

事件回調函數

含義

備註

textboxFocusEvent

輸入框獲得焦點的事件

textboxFocus

textboxKeyEvent 

按鍵彈起時的事件

textboxKey

dataRequestEvent

發出數據查詢請求時的事件

dataRequest

dataReturnEvent

數據查詢請求返回時的事件

dataReturn

dataErrorEvent

返回結果爲空時的事件

dataError

containerExpandEvent

展開下拉框時的事件

containerExpand

typeAheadEvent

符合條件的結果自動用到第一條記錄補齊時的事件

typeAhead

itemMouseOverEvent

鼠標移動到結果項上的事件

itemMouseOver

itemMouseOutEvent

鼠標移出結果項的事件

itemMouseOut

itemArrowToEvent

移動到某一選擇項時的事件

itemArrowTo

itemArrowFromEvent

移出某一選擇項時的事件

itemArrowFrom

itemSelectEvent

選中某一選擇項的事件

itemSelect

unmatchedItemSelectEvent

forceSelectionfalse時,如果輸入了不符合查詢結果的內容時觸發本事件。

unmatchedItemSelect

selectionEnforceEvent

強制從結果集中選擇輸入項時觸發的事件

selectionEnforce

containerCollapseEvent

下拉框收縮時的事件

containerCollapse

textboxBlurEvent

輸入框失去焦點時的事件

textboxBlur

            可以根據需要重載自定義的事件

           例:輸入框獲得焦點時自動進行查詢,可以重載textboxFocusEvent

           myAutoComp.textboxFocusEvent.subscribe(

                 //發送一個查詢條件爲空的查詢請求

           function(){myAutoComp.sendQuery("");}

           );

 

           2 )        格式化下拉框的輸出

           如果返回的結果集中有多個屬性,可以通過重載formatResult來格式化結果項的輸出

           oAutoComp.formatResult = function(oResultItem, sQuery) {

                var sMarkup = oResultItem[0] + " (" + oResultItem[1] + ")" ;

                return (sMarkup);

           }

 

           3 )        AutoComplete的數據源

           l        DS_JSArray

           data = ["AAA","BBB","BCC"];

           var myDataSource = new YAHOO.widget.DS_JSArray(data);

           可以通過DWR的方式調用java方法獲得一字符串數組作爲查詢的下拉框,並在回調函數中可以直接使用,如:

 

           l        DS_JSFunction

           l        DS_XHR

           對於JSArray方式取數時,AutoComplete可以自動根據輸入的內容查在JSArray中查找符合條件的結果項,但在使用XHR方式時,YUI並沒有提供默認的查找功能,必須由用戶通過控制URL參數方式來實現這一功能。

 

          JSON方式:

          使用JSON格式時,創建數據源YAHOO.widget.DS_XHR時第一個參數爲請求的URL,第二個參數爲一數組,這一數組的第一條記錄表示結果集在JSON對象的哪個對象屬性下,如類似於下面結構的JSON對象

          {

          Result:{

          data:[   {username:”Tom”,oldname:”Tom”,age:12”},

          {username:”Jack”,oldname:”Jack”,age:16”}

          ]

          }

          }

          如果是要查詢username則結果集應該表示爲”Result.data”

          第二條記錄爲搜索的主鍵,同上面的例子中如果是要查找出符合條件的username,則第二個數組應爲”username”,如果返回的結果集中還需要返回 oldname屬性,則應該指名數組的第三條記錄”oldname”,後面還可以指定更多的需要返回的屬性。

          因此第二個數組對象參數可以用以下方法表示:

          [結果對象,搜索的主鍵,額外的返回屬性1,…額外的返回屬性N]

 

         function initAutocomplete(){

               var myDataSource1 = new YAHOO.widget.DS_XHR(

         "./queryUsername.action",

         ["data","username"]);

               myDataSource1.responseType = YAHOO.widget.DS_XHR.TYPE_JSON;

               //myDataSource1.scriptQueryAppend = "output=json&results=100";

               var oAutoComp = new YAHOO.widget.AutoComplete("user_username",

         "usernameContainer", myDataSource1);

               oAutoComp.dataRequestEvent.subscribe(

         function(oSelf,sQuery){

         myDataSource1.scriptQueryParam = "username";

         });

         } 

         XML方式:

         應用方式與JSON方式類似,只是將reponseType指定爲

         myDataSource1.responseType = YAHOO.widget.DS_XHR.TYPE_XML 

         FlatData方式:

 

6.5.    DataTable

         DataTable的引入

         <!—需要的CSS -->

         build/datatable/assets/datatable.css

 

         <!--必須的引入 -->

         build/yahoo-dom-event/yahoo-dom-event.js

         <!-- 可選項,用到XHR取數方式時需要 -->

         build/connection/connection-min.js

         <!—可選項,用到調整列寬時需要 -->

         build/dragdrop/dragdrop-min.js

         <!-- Source files -->

         build/datasource/datasource-beta-min.js

         build/datatable/datatable-beta-min.js

 

         DataTable的使用

 

         1).    定義表頭

                  var myColumnHeaders = [

                  {key:"name", text:"姓名"},  

                  {key:"stdno", text:"學號"},  

                  {key:"age", text:"年齡", type:"number"}  

                  ];

                  YAHOO.widget.ColumnSet的屬性說明

 

屬性名稱

含義

key

列的屬性名

text

列的顯示名稱

type

列的類型,包括"string", "number", "date", "currency", "checkbox", "select", "email", "link",缺省爲”string”

resizeable

Boolean值,是否可通過拖動改變列寬度

sortable

Boolean值,是否可排序

abbr

 

children

定義子表頭,類型爲YAHOO.widget.ColumnSet

width

列寬度,單位爲px

className

定義本列單元格的樣式名稱

formatter

定義本列單元格的格式化函數

function(elCell, oRecord, oColumn, oData)

parse

 

editor

定義可編輯的列,可用的值爲”textbox””textarea”

descFunction

遞減排序的函數function(a,b)

ascFunction

遞增排序的函數function(a,b)

 

 

         2).    創建datatable

                  var myDataTable = new YAHOO.widget.DataTable(

                  "myContainer",       //datatable綁定的頁面element(DIV)

                  myColumnSet,      //表頭定義, YAHOO.widget.ColumnSet

                  myDataSource,     //數據源

                     {caption:"My Caption",summary:"摘要"}   //datatable的配置集

                  ); 

          DataTable的配置集

 

屬性名稱

含義

caption

表格的表頭文字

summary

表格摘要

paginator

Boolean值,是否分頁,缺省爲false

paginatorOptions

{

containers:

rowsPerPage: 每頁顯示的記錄數,

pageLinks: 最多顯示的頁面鏈接數,0爲全部

currentPage:當前頁

dropdownOptions:下拉框選擇項,null表示不使用下拉框

}

initialRequest

XHR方式下,附加的請求參數

fixedWidth

固定表格寬度

scrollable

表格有滾動條,滾動時表格表頭保持不動,Boolean

rowSingleSelect

只允許選擇一行,Boolean

contextMenu

表格的上下文菜單,右鍵彈出,YAHOO.widget.ContextMenu

sortedBy

{ colKey:排序的列,

  dir: 排序的方向,"desc""asc" }

pageCurrent

表格的當前頁

 

 

         3).    DataTable的數據源

                  DS_JSArray

                  以對象數組的方式使用,可以是在客戶端定義對象數組,也可以通過DWR的方式調用JAVA的方法獲取一個JAVA類的List列表,在回調函數中以數組方式使用。

                  var commonDataSource =new YAHOO.util.DataSource(data);

                  //data可以爲用javascript定義的對象數組,也可以是DWR方式下回調函數的參數

                  commonDataSource.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;

 

                  JSON

                           使用JSON對象時

                           varmyDataSource =newYAHOO.util.DataSource("query.action");

                           myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;

                           myDataSource.responseSchema ={

                           resultsList:"result.data",//結果集所在的JSON結構中的對象

                              fields: ["id","username","email","monicker","edit","del"]

                           };

                  XML

                           varmyDataSource = newYAHOO.util.DataSource("query.action");

                            myDataSource.responseType = YAHOO.util.DataSource.TYPE_XML;

                            myDataSource.responseSchema ={

                                    resultNode:"Item",// 結果集所在的XML結構中的結點

                                    fields: ["Company","Title","Name","Phone","Email"]//表格的列

                           };

 

                  Plain Text Data

                           varmyDataSource =newYAHOO.util.DataSource("query.action");

                           myDataSource.responseType = YAHOO.util.DataSource.TYPE_TEXT;

                           myDataSource.responseSchema ={

                              recordDelim:""n",// 記錄的分割符

                              fieldDelim:",",// 字段的分割符

                              fields: ["Company","Title","Name","Phone","Email"]//表格的列

                           };

 

         4).    DataTable數據的訪問

                  這裏主要指通過javascript訪問DataTable數據時採用的方式。

                  varrs = YAHOO.Claim.commonDataTable.getRecordSet();

                  varobj = rs.getRecord(i); //獲取第i行的數據對象

                  對象obj的屬性就是定義表頭時指定的各列的key值,可以通過obj[key]訪問該行上的各列屬性值。 

6.6.    DragDrop

6.7.    TreeView

6.8.    Container

         一組模擬windows控件的組件

         Container下的控件繼承關係

Overlay

Module

ToolTip

Dialog

SimpleDialog

Panel

 

         Container的引入

                  <!-- Dependencies -->

                  build/yahoo-dom-event/yahoo-dom-event.js

                  <!—可選項:如果不使用Dialog/SimpleDialog則不需要 -->

                  build/connection/connection-min.js

                  <!—可選項:使用動畫效果時用到 -->

                  build/animation/animation-min.js

                  <!-- Source file -->

                  build/container/container-min.js

           6.8.1.       Container下的控件

                  由於Container下的控件的創建方式和屬性控制方式基本相同,可以在創建組件時通過config對象指定控件的各項屬性,也可以在創建後通過myContainer.cfg.setAttribute來設置控件屬性,通過對這些屬性的控制來實現控件的不同動作表現。因此對於各個子控件的屬性在下面採用配置集的方式用一個表格來說明。

                  Module

                  一種最基礎的控件模塊,通過Module可以創建一個從HTML中繼承下來的javascript對象,你可以操作頁面中的module,也可以動態創建新的modulemodule是沒有預定義樣式的,必須手動定義。

                  使用Module必需的引入

                           build/yahoo-demo/yahoo-dom-event.js

                           build/container/container_core-min.js 

                  初始化的方式:

                           constructorYAHOO.widget.Module(ModuleId,{配置集});

                           moduleId如果頁面中已經定義了moduleId,則可以直接調用render函數將設置的各種屬性直接應用到module上,如果頁面中沒有定義這個id,則必須調用render(DOM中已經存在的element)module插入到DOM中。

                  顯示/隱藏Module

                           方式一:

                                    myModule.show();

                                    myModule.hide();

                           方式二:

                                    myModule.cfg.setProperty("visible", true);

                                    myModule.cfg.setProperty("visible", false);

                  配置集的說明

屬性名稱

含義

備註

visible

Module是否可見,Boolean

 

monitorresize

設置是否創建一個不可見的屏幕元素用來監聽DOM中文字大小的改變,Boolean

 

 

         6.8.2.       Overlay

                  Module的一種擴展,但和Module不同的是Overlay可以通過絕對方式定位,並且是浮動窗口,不會影響頁面中原有的內嵌標籤的佈局。與Module相同的是:也沒有預先定義樣式,必須手動設置。

                  初始化的方式

                           Module相同

                   位置設定

                           1.絕對定位:

                                    myOverlay.cfg.setProperty("x", 100);

                                    myOverlay.cfg.setProperty("y", 200);

                                    myOverlay.cfg.setProperty("xy", [100,200]);

                           2.居中

                                    窗口中居中:myOverlay.center();

                                    屏幕居中:myOverlay.cfg.setProperty("fixedcenter", true);

                           3.對齊

                                    // myOverlay's右上角對齊myContextEl的左上角

                                     myOverlay.cfg.setProperty("context", ["myContextEl", "tr", "tl"]);

                                    設置過對齊方式後可以直接使用align來改變對齊方式

                                    // myOverlay's 右上角對齊 "myContextEl"'s左下角.

                                    myOverlay.align("tr", "bl");

                                    注:對齊方式的寫法: top->t ,left ->l, ,bottom->,right->r

                                    top-left 就表示爲tl

                            配置集

 

屬性名稱

含義

x

設置元素的left屬性

y

設置元素的top屬性

xy

設置元素的top,left屬性

context

停靠位置,[element, Overlay的頂角,被停靠的element頂角]

effect

Overlay顯示或隱藏時的特效對象.

fixedcenter

窗口大小改變或滾屏時保持居中

width

設置元素的width

height

設置元素的height

zIndex

設置Overlay的遮蓋順序

constraintoviewport

設置爲true時保持在視窗邊界以內

iframe

設置爲true時在Overlay後將存在一個ifram,防止被Z序高的element覆蓋

                   已知的特效:

                           YAHOO.widget.ContainerEffect.SLIDE

                           YAHOO.widget.ContainerEffect.FADE          逐步變淡

          OverlayManage

                  用於管理多個Overlay的組件,能夠模擬類似於多窗口管理系統的交互,使得各個Overlay之間的能夠正確的覆蓋、獲得焦點/失去焦點。

         使用這一功能需要的代碼很簡單,只需要通過register方法登記所有需要納入窗口管理的Overlay就可以了。

         //示例:

                  YAHOO.namespage(“demo”);

                  YAHOO.demo.manager = new YAHOO.widget.OverlayManager();

                  YAHOO.demo.manager.register( [Overlay的數組列表] );

       6.8.3.       Tooltip

          對象定義:YAHOO.widget.Tooltip

                    overlay上擴展出來的控件,小的浮動窗口,動態生成,提供了預定義的樣式。

        Tooltip的引入

                    <!-- CSS -->

                    build/container/assets/container.css

                    <!-- Dependencies -->

                     build/yahoo-dom-event/yahoo-dom-event.js

                    <!—如果要改變頁面元素的屬性需要引入-->

                    build/animation/animation-min.js

                    <!-- Source file -->

                    build/container/container-min.js

          Tooltip初始化方式

                    constructorYAHOO.widget.Tooltip(tooltipId , {配置集 } );

                    tooltipId可以是頁面中未聲明的控件。

            Tooltip配置集

 

屬性名稱

含義

text

提示文字

context

鼠標停靠element ID

container

缺省爲document.body,指明容器元素

preventoverlap

缺省爲true,指明是否使用覆蓋方式

showdelay

顯示tooltip的延遲時間,單位毫秒

hidedelay

隱藏tooltip的延遲時間,單位毫秒

autodismissdelay

The number of milliseconds to wait before automatically dismissing a Tooltip after the mouse has been resting on the context element.

 

          同時還繼承了Module,Overlay的所有屬性

    6.8.4.       Panel

          overlay擴展出來的一個組件,類似於操作系統的窗口。他不同於瀏覽器的彈出窗口,是內嵌在頁面文件中的一種動態Htmlelement。他在overlay的基礎上擴展了一些窗口的功能,如關閉、拖放等。Panel使用了預定義的樣式表

           Panel的引入

                    <!-- CSS -->

                    build/container/assets/container.css

                    <!-- Dependencies -->

                    build/yahoo-dom-event/yahoo-dom-event.js

                    <!—可選項:如果用到動畫時需要引入 -->

                    build/animation/animation-min.js

                    <!—可選項:如果用到拖放時需要引入-->

                    build/dragdrop/dragdrop-min.js

                    <!-- Source file -->

                    build/container/container-min.js

          Panel的初始化

                    constructor

                    YAHOO.widget.Panel(panelId); //使用缺省配置選項

                    YAHOO.widget.Panel(panelId,{自定義的配置項}); //使用自定義的配置項

            Panel的配置集 

屬性名稱

含義

close

是否顯示關閉按鈕,true/false

draggable

是否可以拖動

underlay

陰影顯示方式 shadow,none,matte,缺省爲shadownone爲無陰影,matte爲白色邊界

modal

Panel獲得焦點時,是否允許使用Panel以外的控件獲得焦點,類似於MFC的模態/無模態對話框

keylisteners

響應按鍵事件的監聽器列表

 

          Panel同時還繼承了Module,Overlay的屬性

          6.8.5.       Dialog

          Panel上擴展出來的組件,類似於Windows的窗口,在瀏覽器中提供了一種不用頁面跳轉就能使用交互來獲取用戶輸入的交互方式,用戶輸入的數據都是通過一個標準的HTML Form獲取的,並支持多種的獲取輸入數據的方式:普通的Form的提交,XMLHttpRequest,或者完全通過腳本來讀取。

          Dialog的引入

          <!-- CSS -->

          build/container/assets/container.css

          <!-- Dependencies -->

          build/yahoo-dom-event/yahoo-dom-event.js

          <!—可選項: Animation (only required if enabling Animation) -->

          build/animation/animation-min.js

          <!—可選項: Drag & Drop (only required if enabling Drag & Drop) -->

          build/dragdrop/dragdrop-min.js

          <!--可選項: Connection (only required if performing asynchronous submission) -->

          build/connection/connection-min.js

          <!-- Source file -->

          build/container/container-min.js

          Dialog的初始化

                    constructorYAHOO.widget.Dialog(dialogId);

                    dialogId爲頁面中已經申明的element

         Dialog的配置集 

屬性名稱

含義

postmethod

窗口提交的方式,async:異步,form:標準的submitnone:不提交

buttons

dialog中的button數組列表,

           同時繼承了OverlayPanel的屬性

          單個按鈕對象的定義方式:

           { text:按鈕上的文本,

                    handler:按鈕的click事件響應函數

                    isDefault:是否缺省按鈕},

          6.8.6.       SimpleDialog

                    Dialog上擴展出來的一個組件,主要用於處理用戶選擇Yes/NOOK/Cancel的交互

          SimpleDialog的引入

                    <!-- CSS -->

                    build/container/assets/container.css

                    <!-- Dependencies -->

                    build/yahoo-dom-event/yahoo-dom-event.js

                    <!—可選項:用到動畫效果時使用 -->

                    build/animation/animation-min.js

                    <!—可選項:用到拖放功能時使用-->

                    build/dragdrop/dragdrop-min.js

                    <!—可選項:用到異步提交方式時使用) -->

                    build/connection/connection-min.js

                    <!-- Source file -->

                    build/container/container-min.js

              SimpleDialog的初始化

                    constructorYAHOO.widget.SimpleDialog(dialogId,{配置集});

                    dialogId爲頁面中已經申明的element

              SimpleDialog的配置集

 

屬性名稱

含義

text

對話框中顯示的提示信息

icon

按鈕圖標:

ICON_BLOCK,   

ICON_WARN,    

ICON_HELP,     

ICON_INFO,     

ICON_ALARM,   

ICON_TIP.       

           6.9.    Grids

                    支持不規定寬度的設計

                    一組用於定義界面版式的樣式表(CSS文件)

         6.10.   TabView

                    用來創建導航tab欄組件

                    可以從HTML中的已經存在的標籤來創建,也可以完全通過javascript創建,該組件的最上層元素爲<div>,每一個tab頁面項使用<li>

                    TableView的引入

                              <!-- Dependencies -->

                              <!-- core CSS -->

                                        /build/tabview/assets/tabview.css

                               <!-- optional skin for border tabs -->

                                        build/tabview/assets/border_tabs.css

                                        build/yahoo-dom-event/yahoo-dom-event.js

                                        build/element/element-beta-min.js

                                <!—可選項:使用動態加載時使用-->

                                        build/connection/connection-min.js

                               <!-- Source file -->

                                        build/tabview/tabview-min.js

                    TableView的初始化

                              constructorYAHOO.widget.TabView(tableViewId); 

                              創建的方式:

                                   1.頁面中存在id

                                               <div id="demo" class="yui-navset">

                                                  <ul class="yui-nav">

                                                      <li class="selected"><a href="#tab1"><em>Tab One Label</em></a></li>

                                                      <li><a href="#tab2"><em>Tab Two Label</em></a></li>

                                                      <li><a href="#tab3"><em>Tab Three Label</em></a></li>

                                                  </ul>           

                                                  <div class="yui-content">

                                                      <div><p>Tab One Content</p></div>

                                                      <div><p>Tab Two Content</p></div>

                                                    <div><p>Tab Three Content</p></div>

                                                  </div>

                                              </div>

 

                                              注:

                                              yui-navsetcss文件中定義的TableView的樣式

                                              yui-navcss文件中定義的Tab頁標籤的樣式   

 

                                  2.完全使用JavaScript創建TabView

                                              <script type="text/javascript">

                                              var myTabs = new YAHOO.widget.TabView("demo");

     

                                                  myTabs.addTab( new YAHOO.widget.Tab({

                                                      label: 'Tab One Label',

                                                      content: '<p>Tab One Content</p>',

                                                      active: true

                                                  }));

   

                                                  myTabs.addTab( new YAHOO.widget.Tab({

                                                      label: 'Tab Two Label',

                                                      content: '<p>Tab Two Content</p>'

                                                  }));

   

                                                  myTabs.appendTo(document.body);

                                              </script>

          TableView的配置集

屬性名稱

含義

activeIndex

當前激活的Tab頁面編號,第一頁爲0

activeTab

YAHOO.widget.Tab,指向被激活的Tab頁,

element

被綁定的HTML元素

orientation

頁面標籤所在的位置,topbottomleftright默認爲top

tabs

標籤頁(Tab)的數組列表,只讀

           Tab的配置集

屬性名稱

含義

active

當前Tab頁面是否激活,Boolean

cacheData

Tab頁加載數據的時候是否隱藏,只有dataSrc可用的時候有效

content

激活頁面的文字標籤

contentEl

 

dataLoaded

數據是否加載完成

dataSrc

如果設置了這一屬性,當Tab頁被激活時,頁面數據從這個URL處加載,需要用到Connection Manager

dataTimeout

Tab頁加載的超時時間,單位微秒,只有在設置了dataSrc纔有效

disabled

是否禁止激活本Tab頁,缺省爲false

label

Tab頁的標籤

labelEl

Tab頁的HTML容器元素

loadMethod

數據請求的方式,缺省爲GET,只有在設置了dataSrc纔有效

             TabView用到的CSS定義

Class

描述

yui-navset

TabView<div>

yui-nav

TabView<ul>

yui-content

TabView<div>的下一級<div>

disabled

Tab頁面不可用時的樣式,應用在<ul>

selected

Tab頁面激活時的樣式,應用在<ul>

loading

Tab頁面加載時的樣式,TabView<div>的下一級<div>的樣式

 

 7.           常見問題

         YUI提供的javascript的文件引入

             關於引入的版本:

              YUI對於需要引入的js文件都提供了多個版本:

                                1         min是去掉空格後的版本,在正式項目中建議使用min版。

                                2         debug是調試的版本,主要結合YUIlog組件使用。

                                3         beta

                                4         不帶後綴的爲便於閱讀的版本

               yahoo-dom-event.js是包含了yahoo.jsdom.jsevent.js的內容,使用了前者後就無需再引入後面三個文件。

                關於引入的順序:

                                1.大部分組件都是依賴於事件驅動,並通過YUI提供的工具集進行DOM操作的,因此yahoo.jsdom.jsevent.js或者這三個文件的合成文件yahoo-dom-event.js必須早於其他YUIjs文件引入

                                2.Autocomplete如果需要從服務器取數據時,要用到YUI提供的datasource.js,因此datasource.js必須在autocomplete.js之前引入;如果是以XHRJSONXML等)的方式取數,還要用到YUI提供的connection,因此connection.js也必須在autocomplete.js之前引入;如果用到了動畫方式展開下拉框,則需要保證animation.jsautocomplete.js之前引入。

                                3.Datatable中列寬度的調整,Container組件中的Overlay以及從Overlay繼承下來的DialogSimpleDialog的窗口拖動,需要用到dragdrop.js,因此dragdrop.js必須在datatable.jscontainer.js之前引入;如果要用到Dialog的動畫顯示效果,則需要先引入animation.js

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章