文章日期:2006/9/26
新版的GIRD可以支持遠程數據了。分頁和遠程排序的設置是通俗易懂的,另外一些常用的自定義的參數我會在這篇貼子中說明一下。新論壇的界面(在建設中)就是一個分頁和遠程排序的好例子,而本文的代碼均來自那個例子。
新方法和屬性
利用LoadableDatatModel對象(XMLDataModel和JSONDataModel的父類)實現分頁和遠程排序,有若干種的新方法和屬性。
下列變量“dm”指的是DataModel的實例。
方法
dm.initPaging('topics.php', 20);// the grid is ready, load page 1 of topics dm.loadPage(1);
dm = new YAHOO.ext.grid.XMLDataModel({ tagName: 'Topic', totalTag: 'TotalCount', id: 'id', fields: ['title', 'author', 'totalPosts', 'lastPost', 'lastPoster'] });另外一種辦法: dm = new YAHOO.ext.grid.XMLDataModel({ tagName: 'Topic', id: 'id', fields: ['title', 'author', 'totalPosts', 'lastPost', 'lastPoster'] }); dm.getTotalRowCount = function(){ return 500; //或者是你要的數量 } // 調用“/data.php”產生所有分頁、排序dm.pageUrl = '/data.php';//這種方式也不錯dm.initPaging('/foo.php', 50);// 傳入已選擇好forumId的值,產生所有分頁、排序dm.baseParams['forumId'] = forumId;
//"page"改名為"pageNum"myDataModel.paramMap['page'] = 'pageNum';
把所有功能組合在一起
這是一個創建Gird的過程,和分頁代碼:
// 限制選區只是一行sm = new YAHOO.ext.grid.SingleSelectionModel();// 監聽選區改變sm.addListener('selectionchange', onSelection);// 創建我們的column modelcm = new YAHOO.ext.grid.DefaultColumnModel([ {header: "Topic", width: 330}, {header: "Author", width: 100}, {header: "Posts", width: 40}, {header: "Last Post", width: 150}, {header: "Last User", width: 120}]);//這個屬性設置默認的排序,免得在每個column上設置。cm.defaultSortable = true;// 創建數據模型data model。注意"totalTag"條目。它告訴model去尋找該節點下全部的紀錄。dm = new YAHOO.ext.grid.XMLDataModel({ tagName: 'Topic', totalTag: 'TotalCount', id: 'id', fields: ['title', 'author', 'totalPosts', 'lastPost', 'lastPoster']});// 初始化分頁dm.initPaging('topics.php', 20);//設置我們想轉入的附加參數(可作為第三個參數傳入到inirPaing)dm.baseParams = {'forumId': 4};dm.setDefaultSort(cm, 3, 'DESC');//當每次新數據加載后,選擇GIRD的第一行dm.addListener('load', sm.selectFirstRow, sm, true);// 創建grid對象grid = new YAHOO.ext.grid.Grid('topics-grid', dm, cm, sm);grid.render();//分頁工具條,下面將會分析var toolbar = grid.getView().getPageToolbar();toolbar.addSeparator();toolbar.addButton({ className: 'new-topic-button', text: "New Topic", click: createTopic});// 當gird準備好,加載話題的第一項dm.loadPage(1);分頁工具條 Paging Toolbar
由于分頁的按鈕較為常用,我決定寫一個簡易的工具條組件來實現分頁。今次發布的YAHOO.ext.Toolbar十分簡單,提供了一些方法,用來實現工具條的分頁。 按鈕的設置靠CSS完成。圖標ICON應該是16X16標準圖片。如果不是,圖片會被切割。 添加按鈕的例子:
toolbar.addButton({ className: 'my-button', tooltip: "New Foo", click: createFoo});在CSS中ENABLE/DISABLED圖標: .my-button{ background-image: url(../images/foo.gif);}.ytb-button-disabled .my-button{ background-image: url(../images/foo-disabled.gif);}創建帶文字的ICON(JS寫法如上例): toolbar.addButton({ className: 'my-button', text: "New Foo", click: createFoo});但CSS寫法就有點復雜: .ytoolbar .my-button{ background-image: url('images/foo.gif'); background-position: 0px 0px; background-repeat: no-repeat; padding-left:18px; padding-top:1px; width:auto; display:block;}要自定義一大堆圖標的工具條,最好就是css sprite。新版GIRD的分頁圖標可能就會采用CSS Sprite這種方式。
下一步做的是。。
下一篇帖子我將會說說grid的拖放,以及兩個gird之間的拖放。
Jack
新聞熱點
疑難解答