1. 程式人生 > >3、YUI部分中文文件2

3、YUI部分中文文件2

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

<!-- 必須引入 -->

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

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);

}

3AutoComplete的資料來源

lDS_JSArray

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

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

可以通過DWR的方式呼叫java方法獲得一字串陣列作為查詢的下拉框,並在回撥函式中可以直接使用,如:

lDS_JSFunction

lDS_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方式:

<!—需要的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

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物件時

var myDataSource = new YAHOO.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

var myDataSource = new YAHOO.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

var myDataSource = new YAHOO.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資料時採用的方式。

var rs = YAHOO.Claim.commonDataTable.getRecordSet();

var obj = rs.getRecord(i);  //獲取第i行的資料物件

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

5.測試

一組模擬windows控制元件的元件

Overlay

Module

ToolTip

Dialog

SimpleDialog

Panel

<!-- 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

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

一種最基礎的控制元件模組,通過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

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          逐步變淡

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

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

//示例:

YAHOO.namespage(“demo”);

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

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

物件定義:YAHOO.widget.Tooltip

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

<!-- 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

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

tooltipId可以是頁面中未宣告的控制元件。

屬性名稱

含義

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的所有屬性

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的屬性

Panel上擴展出來的元件,類似於Windows的視窗,在瀏覽器中提供了一種不用頁面跳轉就能使用互動來獲取使用者輸入的互動方式,使用者輸入的資料都是通過一個標準的HTML Form獲取的,並支援多種的獲取輸入資料的方式:普通的Form的提交,XMLHttpRequest,或者完全通過指令碼來讀取。

<!-- 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

constructorYAHOO.widget.Dialog(dialogId);

dialogId為頁面中已經申明的element

屬性名稱

含義

postmethod

視窗提交的方式,async:非同步,form:標準的submitnone:不提交

buttons

dialog中的button陣列列表,

同時繼承了OverlayPanel的屬性

單個按鈕物件的定義方式:

 { text:按鈕上的文字,

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

isDefault:是否預設按鈕},

Dialog上擴展出來的一個元件,主要用於處理使用者選擇Yes/NOOK/Cancel的互動

<!-- 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

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

dialogId為頁面中已經申明的element

屬性名稱

含義

text

對話方塊中顯示的提示資訊

icon

按鈕圖示:

ICON_BLOCK,   

ICON_WARN,    

ICON_HELP,     

ICON_INFO,     

ICON_ALARM,   

ICON_TIP.       

支援不規定寬度的設計

一組用於定義介面版式的樣式表(CSS檔案)

用來建立導航tab欄元件

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

<!-- 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

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>

屬性名稱

含義

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才有效

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>的樣式