对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 相关文章推荐
js玩一玩WSH吧
Feb 23 Javascript
js+FSO遍历文件夹下文件并显示
Mar 07 Javascript
JavaScript 脚本将当地时间转换成其它时区
Mar 19 Javascript
查看源码的工具 学习jQuery源码不错的工具
Dec 26 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
Dec 26 Javascript
Javacript中自定义的map.js  的方法
Nov 26 Javascript
VS Code转换大小写、修改选中文字或代码颜色的方法
Dec 15 Javascript
VueJS 组件参数名命名与组件属性转化问题
Dec 03 Javascript
Vue传参一箩筐(页面、组件)
Apr 04 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
Jul 04 jQuery
你准备好迎接vue3.0了吗
Apr 28 Javascript
jquery html添加元素/删除元素操作实例详解
May 20 jQuery
学习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图片验证码代码
2008/03/27 PHP
PHP 登录完成后如何跳转上一访问页面
2014/01/14 PHP
php制作基于xml的RSS订阅源功能示例
2017/02/08 PHP
JavaScript 学习笔记(五)
2009/12/31 Javascript
基于jQuery替换table中的内容并显示进度条的代码
2011/08/02 Javascript
jQuery实现返回顶部效果的方法
2015/05/29 Javascript
详解AngularJS实现表单验证
2015/12/10 Javascript
深入浅析JavaScript面向对象和原型函数
2016/02/06 Javascript
Angularjs整合微信UI(weui)
2016/03/15 Javascript
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
深入理解Python中的元类(metaclass)
2015/02/14 Python
Python中实现参数类型检查的简单方法
2015/04/21 Python
python使用socket向客户端发送数据的方法
2015/04/29 Python
Python批量按比例缩小图片脚本分享
2015/05/21 Python
Python中有趣在__call__函数
2015/06/21 Python
python实现excel读写数据
2021/03/02 Python
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
2018/04/27 Python
浅谈python中字典append 到list 后值的改变问题
2018/05/04 Python
Python常见数字运算操作实例小结
2019/03/22 Python
python 列表中[ ]中冒号‘:’的作用
2019/04/30 Python
django 通过URL访问上传的文件方法
2019/07/28 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
Python爬虫爬取糗事百科段子实例分享
2020/07/31 Python
当当网软件测试笔试题
2015/11/24 面试题
电台编导求职信
2014/05/06 职场文书
施工安全汇报材料
2014/08/17 职场文书
2014年班务工作总结
2014/12/02 职场文书
优秀班主任材料
2014/12/16 职场文书
关于成立领导小组的通知
2015/04/23 职场文书
早恋主题班会
2015/08/14 职场文书
2016三八妇女节慰问信
2015/11/30 职场文书
2016年植树节红领巾广播稿
2015/12/17 职场文书
pandas:get_dummies()与pd.factorize()的用法及区别说明
2021/05/21 Python
mysql中between的边界,范围说明
2021/06/08 MySQL
GitHub上77.9K的Axios项目有哪些值得借鉴的地方详析
2021/06/15 Javascript