中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

Gird組件 Part-3:范例RSSFeed Viewer

原文地址 文章日期:2006/09/04

新組件Gird包含了許多的類和繼承方法。如果讀者不是太熟悉的面向?qū)ο箝_發(fā)的話,可能會(huì)對(duì)一個(gè)變量如何從某個(gè)類得到繼承的方法感到困惑,用起GIRD來感到困難。在YAHOO.ext.gird包中,大多數(shù)類是設(shè)計(jì)成為“即插即用plug and play”的,可擴(kuò)展的extended和可自定義的customized,能以最小量的代碼插入輕松到web程序中。

要測(cè)試和創(chuàng)建一個(gè)實(shí)現(xiàn)gird的范例,我決定做一個(gè)簡(jiǎn)單的,只有一頁的RSS種子采集器RSS Feed Viewer。整個(gè)程序?qū)懥?00行代碼而其中有20行是關(guān)于gird的。這個(gè)范例說明了gird的一些典型功能,如Ajax loading,預(yù)處理(preprocessing)和自定義渲染(custom rendering)

這里嵌入了個(gè)迷你型程序(用iframe)

我一步一步手把手帶你進(jìn)入GIRD,還會(huì)支持哪些是關(guān)鍵的地方,哪些不是。

Step 1 創(chuàng)建柱模型ColumnModel

var myColumns = [  {header: "Title", width: 350, sortable: true},   {header: "Date", width: 125, sortable: true, renderer: formatDate}];var colModel = new YAHOO.ext.grid.DefaultColumnModel(myColumns);

GRID從柱模型中取得某一列的信息。在這個(gè)例子我們調(diào)用一個(gè)默認(rèn)的柱模型(稱DefaultColumnModel),一個(gè)包含所有相關(guān)的信息的對(duì)象。對(duì)象的屬性如下:

  • header: - 表頭
  • width: - 寬度
  • sortable: - true=可排序
  • renderer: - 指定渲染方式。調(diào)用函數(shù)參數(shù)為 (value, rowIndex, columnIndex),并由函數(shù)返回(return)值來顯示到單元格cell中。
  • sortType: - 指定排序方式。參見文檔資料,有5到6種的轉(zhuǎn)換方式。

除header和width其它為可選的

創(chuàng)建DataModel數(shù)據(jù)模型

var schema = {   tagName: 'item',   id: 'use-index',   fields: ['title', 'pubDate']};this.dataModel = new YAHOO.ext.grid.XMLDataModel(schema);this.dataModel.addPreprocessor(1, parseDate); //列1是日期,先預(yù)處理一下this.dataModel.onLoad.subscribe(this.onLoad, this, true);this.dataModel.onLoadException.subscribe(this.showError, this, true);this.dataModel.setDefaultSort(colModel, 1, 'ASC');

DataModel是GIRD的數(shù)據(jù)來源。所有在 YAHOO.ext.grid包中的DataModels,都有一系統(tǒng)通知UI改變內(nèi)容的事件。也就是說你可以改變model內(nèi)的數(shù)據(jù),而同時(shí)對(duì)UI自動(dòng)映射。

這個(gè)范例中我們使用XMLDataModel。XMLDataModel提供一個(gè)簡(jiǎn)易的方式來映射XML文檔與gird之間的結(jié)構(gòu)。你所要做的是寫個(gè)簡(jiǎn)單的schema,讓model知道有哪些column給gird。Schema有下列屬性:

  • tagName: - Model會(huì)讀取這一節(jié)點(diǎn)下(tagName)的所有子節(jié)點(diǎn)(items的上一層節(jié)點(diǎn)名稱);
  • id: - The attribute or child element to match to get the id of the row. If an attribute or child element is not found with the supplied "id" name, the index of the record is used. So if you don't have a specific id attribute, just use something like 'use-index' which won't be matched and the index will be used.
  • fields: - An array of attribute names or child node tag names to match for the column values. If you have 4 columns in your ColumnModel, you should have 4 items in your fields array. If a name specified in the array isn't found, an empty string is used.

接著我們加入一個(gè)自定義的預(yù)處理器函數(shù)( a custom preprocessor)。如果只是對(duì)日期排序,不用這個(gè)函數(shù),也是沒問題的(默認(rèn)它自己也會(huì)排序)。用的好處是效率更高。要注意的是,必須在 數(shù)據(jù)成為model數(shù)據(jù)一部分之前使用這個(gè)函數(shù)。所有RSS FEED和XML實(shí)質(zhì)都是字串符Strings,如果要讓JavaSCRIPT分析,應(yīng)該先要類型轉(zhuǎn)換,我們加入一個(gè)預(yù)處理器來轉(zhuǎn)換到JavaSCRIPR類型,然后放到DataModel中。

下面說說DataModel事件和默認(rèn)排序(譯注:好像沒有排序),較易理解的內(nèi)容。

Step 3: 創(chuàng)建Grid

this.selModel = new YAHOO.ext.grid.SingleSelectionModel();this.selModel.onRowSelect.subscribe(this.showPost, this, true); this.grid = new YAHOO.ext.grid.Grid('feed-grid', this.dataModel, colModel, this.selModel); this.grid.render(); 

首先我們創(chuàng)建一個(gè)SingleSelectionModel。原因是我們想在同一時(shí)間內(nèi),限制只有一個(gè)選區(qū)是被選中的。如果你不想要這種限制,忽略相關(guān)代碼便可,不指定的情況下gird會(huì)自動(dòng)創(chuàng)建DefaultSelectionModel。

SelectionModel暴露了兩個(gè)事件:onRowSelect 和 onSelectionChange。onRowSelect當(dāng)某一行選中或反選時(shí)觸發(fā),還有一個(gè)參數(shù)允許你傳入,以便得知哪一個(gè)行被選中或反選。onSelectionChange當(dāng)Gird的選區(qū)發(fā)生改變時(shí)觸發(fā)。兩者最主要的區(qū)別,當(dāng)超過一行被選中(同一時(shí)間內(nèi)),選區(qū)的每一行會(huì)觸發(fā)各自的事件,而onSelectionChange只會(huì)在多選區(qū)完成選擇后,觸發(fā)一次事件。更多關(guān)于這兩個(gè)事件的細(xì)節(jié),請(qǐng)參閱文檔。

現(xiàn)在創(chuàng)建我們的Gird對(duì)象。第一個(gè)參數(shù)傳入Grid構(gòu)建函數(shù)的是被渲染的container(又作holder:架子、載體、Grid的承受者,在MVC中大量使用)。Container必須指定高度和寬度,如果沒有設(shè)置絕對(duì)/相對(duì)的定位,GIRD會(huì)設(shè)置"相對(duì)"。接下的第二和第三的參數(shù)是Step 1、 Step2 的對(duì)象。

然后我們開始渲染render()。事件上渲染grid到container。在render()調(diào)用之前,任何的效果如隔行換色、MouseOver換色等等的必須設(shè)置好。盡管數(shù)據(jù)和選區(qū)是事件驅(qū)動(dòng)的,可是一經(jīng)渲染便不能改變。所以這方法只調(diào)用一次。遺憾的是,你不能渲染多個(gè)同是一個(gè)grid的containers,即grid實(shí)例是不可再用的。

Step 4 - 加載一些數(shù)據(jù)

this.dataModel.load('feed.php', {feed: 'http://feeds.feedburner.com/ajaxian'});

創(chuàng)建好XMLDataModel之后,這個(gè)方法方可調(diào)用。我的建議是在所有東西創(chuàng)建好之后調(diào)用該方法,這樣的話,用戶看到GIRD 的UI之前,數(shù)據(jù)已經(jīng)加載好。

load()帶有三個(gè)方法。URL(必選),參數(shù)(可選),回調(diào)(可選)。參數(shù)亦可以經(jīng)過編碼的encoded字串符 (param1=one¶m2=two) ,或是一個(gè)object(例子便是)。如果是對(duì)象,發(fā)送之前會(huì)將其鍵和值編碼成URI。

然后我們開始渲染render()。事件上渲染grid到container。在render()調(diào)用之前,任何的效果如隔行換色、MouseOver換色等等的必須設(shè)置好。盡管數(shù)據(jù)和選區(qū)是事件驅(qū)動(dòng)的,可是一經(jīng)渲染便不能改變。所以這方法只調(diào)用一次。遺憾的是,你不能渲染多個(gè)同是一個(gè)grid的containers,即grid實(shí)例是不可再用的。

如果你已經(jīng)有XML文檔的話,就可以直接加載,不用AJAX。load方法可以多次調(diào)用,替換或追加GRID數(shù)據(jù)。在view.js代碼中你可見到當(dāng)用戶sumbit提交feed form時(shí)的load()調(diào)用。

創(chuàng)建一個(gè)GRID和AJAX加載的代碼行數(shù)不超過20行,而且是直來直去不繞彎的。雖然這還未能足以發(fā)揮GIRD全部威力,但希望這小小的例子能幫助你開始入門。不要被這些類難到你。大多數(shù)這些類是在內(nèi)部使用的,或者你要自定義GIRD或擴(kuò)展GIRD,都無需修過核心。

完整的 feed-viewer.js下載 here. CSS 這里欲查看HTML源,在IFRAME上右鍵,應(yīng)該會(huì)有“查看源代碼”的選項(xiàng)。

JavaScript技術(shù)Gird組件 Part-3:范例RSSFeed Viewer,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 欧美日韩在线播放 | 亚洲电影一区 | 成人99| 久久精品色欧美aⅴ一区二区 | 日本三级网址 | 高清人人天天夜夜曰狠狠狠狠 | 97精品超碰一区二区三区 | 日韩国产专区 | 久久久www成人免费精品张筱雨 | 国产在线观看一区二区三区 | 久久国产综合 | 国产在线高清 | 久久精品99| 日日摸日日爽 | 精品无码久久久久久国产 | 午夜免费视频 | 天天草天天干 | 久久蜜桃资源一区二区老牛 | 日韩欧美中文在线 | 亚洲国产欧美日韩 | 欧美一级三级在线观看 | 久久精品亚洲一区 | 国产成人小视频 | 在线免费观看视频黄 | 99精品一区二区 | 欧美一级黄色片免费观看 | 看亚洲a级一级毛片 | 日韩电影一区 | 国产精品久久精品 | 视频二区在线观看 | 中文字幕在线第二页 | 一区在线视频 | 成人免费视频在线观看 | www.日本国产 | 伊人伊成久久人综合网站 | 久久综合久久久 | 国产精品国产三级国产aⅴ原创 | 亚洲免费在线 | 欧美一区二区大片 | 欧美一区二区三区视频在线 | 午夜一级大片 |