对YUI扩展的Gird组件 Part-1


Posted in Javascript onMarch 10, 2007

原文地址

文章日期: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
});
在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

Javascript 相关文章推荐
下拉列表select 由左边框移动到右边示例
Dec 04 Javascript
JS实现从网页顶部掉下弹出层效果的方法
Aug 06 Javascript
Bootstarp风格的toggle效果分享
Feb 23 Javascript
JQuery点击事件回到页面顶部效果的实现代码
May 24 Javascript
Node.js如何自动审核团队的代码
Jul 20 Javascript
VUE中使用Vue-resource完成交互
Jul 21 Javascript
微信小程序 本地图片按照屏幕尺寸处理
Aug 04 Javascript
JavaScript递归函数解“汉诺塔”算法代码解析
Jul 05 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
May 21 Javascript
Express结合Webpack的全栈自动刷新
May 23 Javascript
Vue 自适应高度表格的实现方法
May 13 Javascript
JS前后端实现身份证号验证代码解析
Jul 23 Javascript
学习YUI.Ext第七日-View&JSONView Part Two-一个画室网站的案例
Mar 10 #Javascript
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
Mar 10 #Javascript
学习YUI.Ext 第七天--关于View&JSONView
Mar 10 #Javascript
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
Mar 10 #Javascript
学习YUI.Ext第五日--做拖放Darg&Drop
Mar 10 #Javascript
学习YUI.Ext 第四天--对话框Dialog的使用
Mar 10 #Javascript
学习YUI.Ext 第三天
Mar 10 #Javascript
You might like
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
2013/06/25 PHP
php简单获取复选框值的方法
2016/05/11 PHP
Yii调试查看执行SQL语句的方法
2016/07/15 PHP
php支付宝系列之电脑网站支付
2018/05/30 PHP
jQuery中ajax的get()方法用法实例
2014/12/26 Javascript
jquery隔行换色效果实现方法
2015/01/15 Javascript
基于gulp合并压缩Seajs模块的方式说明
2016/06/14 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
2016/09/25 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
jQuery+PHP+Mysql实现抽奖程序
2020/04/12 jQuery
jQuery实现简单的下拉菜单导航功能示例
2017/12/07 jQuery
微信小程序版翻牌小游戏
2018/01/26 Javascript
解决vue 单文件组件中样式加载问题
2019/04/24 Javascript
Vue CLI2升级至Vue CLI3的方法步骤
2019/05/20 Javascript
vue获取form表单的值示例
2019/10/29 Javascript
JavaScript实现模态对话框实例
2020/01/13 Javascript
解决小程序无法触发SESSION问题
2020/02/03 Javascript
实例讲解Python中函数的调用与定义
2016/03/14 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
2018/10/21 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
2018/12/12 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
节日快乐! Python画一棵圣诞树送给你
2019/12/24 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
2020/04/09 Python
浅谈如何使用python抓取网页中的动态数据实现
2020/08/17 Python
CSS3 创建网页动画实现弹跳球动效果
2018/10/30 HTML / CSS
详解移动端h5页面根据屏幕适配的四种方案
2020/04/15 HTML / CSS
I.T集团香港官方商城:ITeSHOP.com Hong Kong
2019/02/15 全球购物
Madewell澳大利亚官方网站:美国休闲服饰品牌
2019/07/18 全球购物
将"引用"作为函数参数有哪些特点
2013/04/05 面试题
逃课检讨书怎么写
2015/01/01 职场文书
2015年中秋节活动总结
2015/03/23 职场文书
无保留意见审计报告
2015/06/05 职场文书
评奖评优个人先进事迹材料
2015/11/04 职场文书
golang中的并发和并行
2021/05/08 Golang
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python