对YUI扩展的Gird组件 Part-1_YUI.Ext相关
文章日期:2006/9/26
新版的GIRD可以支持远程数据了。分页和远程排序的设置是通俗易懂的,另外一些常用的自定义的参数我会在这篇贴子中说明一下。新论坛的界面(在建设中)就是一个分页和远程排序的好例子,而本文的代码均来自那个例子。
新方法和属性
利用LoadableDatatModel对象(XMLDataModel和JSONDataModel的父类)实现分页和远程排序,有若干种的新方法和属性。
下列变量“dm”指的是DataModel的实例。
方法
-
initPaging(url, pageSize, baseParams) 现实分页的最重要方法。用该方法,你可以一次过地初始化分页。有关参数的资料,请参阅下列相关的属性。例子fourm.js的用法:
dm.initPaging('topics.php', 20);
登入後複製 -
loadPage(pageNum, callback, keepExisting)加载新的一页。你的回调(callback)将会在数据加载完毕后调用。”keepExisting“决定是否覆盖当前的数据,或者在已有的数据上添加新数据。例子fourm.js的用法:
// the grid is ready, load page 1 of topics dm.loadPage(1);
登入後複製 - isPaged()返回分页是否被激活;
-
getTotalRowCount()返回可用的总记录数(the total number of record)XMLDataModel有新的属性“totalTag”,用来获取总行数。总行数由服务器返回生成XML文档中的“totalTag”那个节点取值,这是一个让DataModel知道有多少记录好的方法。如果你想特定某个总数,可以在Gird初始化的时候用getTotalRowCount覆盖(override)总数 forum.js采用默认的方式: 另外一种办法:
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; //或者是你要的数量 }
登入後複製 - getPageSize()返回已配置的page size
- getTotalPages() 用page size和total rows计算出可用页数。
- pageSize - 每页的记录数。可在initPaging参数中设置或直接设置。
- pageUrl - 调用的URL,返回数据。可在initPaging参数中设置或直接设置。
// 调用“/data.php”产生所有分页、排序 dm.pageUrl = '/data.php'; //这种方式也不错 dm.initPaging('/foo.php', 50);
- remoteSort - 类型:Boolean True值激活远程排序。如果你使用initPaging()上面的方法,这个会自动被设置成TRUE,否则默认是false。
- baseParams - 类型:Object。 由”键、键值name/value “组成的对象,会被包含到每个分页、排序请求。在论坛中我使用了这个传递选择好的forumId到我的数据脚本中:
// 传入已选择好forumId的值,产生所有分页、排序 dm.baseParams['forumId'] = forumId;
- paramMap -类型 Object。 model添加分页、排序的请求,默认的通过下列参数 :page, pageSize, sortColumn 和 sortDir。如果你不想使用这些参数名字的话可通过map的参数改名。例如:
//"page"改名为"pageNum" myDataModel.paramMap['page'] = 'pageNum';
把所有功能组合在一起
这是一个创建Gird的过程,和分页代码:
// 限制选区只是一行 sm = new YAHOO.ext.grid.SingleSelectionModel(); // 监听选区改变 sm.addListener('selectionchange', onSelection); // 创建我们的column model cm = 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 });
.my-button{ background-image: url(../images/foo.gif); } .ytb-button-disabled .my-button{ background-image: url(../images/foo-disabled.gif); }
toolbar.addButton({ className: 'my-button', text: "New Foo", click: createFoo });
.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

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。
