幻想天堂
BlogJava
首页
新随笔
联系
聚合
管理
数据加载中……
YUI-dataTable 服务端分页及动态排序
今天先讲下YUI的数据表格中,从服务端获取数据和根据服务端数据排序的方法.官方示例的地址:
http://developer.yahoo.com/yui/examples/datatable/dt_dynamicdata.html
首先是必备的js,css文件的引入,可以从以下地址配置:
http://developer.yahoo.com/yui/articles/hosting/?datatable#configure
服务端返回数据的格式(=.=! 暂时还没找到改变这种格式的其他方法,应该是跟数据源有关):
{
"
recordsReturned
"
:
25
,
"
totalRecords
"
:
1397
,
"
startIndex
"
:
0
,
"
sort
"
:
null
,
"
dir
"
:
"
asc
"
,
"
pageSize
"
:
10
,
"
records
"
:[
{
"
id
"
:
"
0
"
,
"
name
"
:
"
xmlqoyzgmykrphvyiz
"
,
"
date
"
:
"
13-Sep-2002
"
,
"
price
"
:
"
8370
"
,
"
number
"
:
"
8056
"
,
"
address
"
:
"
qdfbc
"
,
"
company
"
:
"
taufrid
"
,
"
desc
"
:
"
pppzhfhcdqcvbirw
"
,
"
age
"
:
"
5512
"
,
"
title
"
:
"
zticbcd
"
,
"
phone
"
:
"
hvdkltabshgakjqmfrvxo
"
,
"
email
"
:
"
eodnqepua
"
,
"
zip
"
:
"
eodnqepua
"
,
"
country
"
:
"
pdibxicpqipbsgnxyjumsza
"
},
]
}
JS代码:
中间会穿插些struts2的标签
YAHOO.namespace('YAHOO.uunav');
$(document).ready(
function
(){
//
YUI的LOAD方法写起来没有JQUERY的简单,呵呵,偷下懒,结合起来用
var
table
=
YAHOO.yayasoft.buildTable({
url:
"
${contextPath}/ajax/phone!initPhone.act?
"
,
param:
"
sort=id&dir=desc&startIndex=0&pageSize=<s:property value='pages.pageSize' />
"
,
pageSize:
<
s:property value
=
'pages.pageSize'
/>
});
}
//
构建一个表格,数据通过datasource获取,服务器以JSON格式返回数据
YAHOO.uunav.buildTable
=
function
(config){
var
Dom
=
YAHOO.util.Dom;
//
定义一个DOM对象
//
定义表格列,key:数据字段,label:页面显示名称,sortable:是否排序,默认false
var
myColumnDefs
=
[
{key:
"
id
"
,label:
"
编号
"
,sortable:
true
},
{key:
"
company
"
,label:
"
公司名称
"
,sortable:
true
},
{key:
"
tel1
"
,label:
"
电话号码
"
,sortable:
true
},
{key:
"
privinceStr
"
,label:
"
省份
"
},
{key:
"
cityStr
"
,label:
"
城市
"
},
{key:
"
ischeck
"
,label:
"
审核情况
"
,sortable:
true
},
{key:
"
catalog.names
"
,label:
"
类别
"
},
{key:
"
createDate
"
,label:
"
创建日期
"
,sortable:
true
},
{key:
"
coment
"
,label:
"
评论
"
,formatter:
"
myComent
"
}
//
{key:"ac",label:"操作",formatter:"myAction"}
//
{key:"ac",label:"操作"}
];
//
格式化表格
YAHOO.widget.DataTable.Formatter.myComent
=
function
(elCell, oRecord, oColumn, oData){
//
var d=oData
//
if(YAHOO.lang.isString(oData)){
//
elCell.innerHTML="string"+oData.length;
//
}
if
(oData.length
>
5
){
elCell.innerHTML
=
oData.substring(
0
,
5
)
+
"
"
;
}
else
{
elCell.innerHTML
=
oData;
}
elCell.title
=
oData;
}
YAHOO.widget.DataTable.Formatter.myAction
=
function
(elCell, oRecord, oColumn, oData){
var
id
=
oRecord.getData(
"
id
"
);
elCell.innerHTML
=
"
<a href=\
"
#
"
+id+
"
\
"
>edit</a>
"
;
}
//
自定义转换函数 用于表格数据展示不同效果
var
ischecked
=
function
(odata){
if
(
!
YAHOO.lang.isNumber(odata))
return
"
数据有错误
"
;
if
(odata
==
0
)
return
"
未审核
"
;
//
此处由cfg4u配置输出
if
(odata
==
1
)
return
"
已审核
"
;
if
(odata
==
2
)
return
"
拒绝
"
;
return
"
数据有错误
"
;
}
//
格式化日期,因为服务器端获取的日期格式是10位整形
var
formatDate
=
function
(odata){
formatDate.re
=
new
Date(parseFloat(odata)
*
parseFloat(
1000
));
return
formatDate.re.getYear()
+
"
-
"
+
(formatDate.re.getMonth()
+
1
)
+
"
-
"
+
formatDate.re.getDate();
}
//
表格行格式化,elTr:一行,oRecord:数据
var
myRowFormatter
=
function
(elTr, oRecord){
if
(oRecord.getData('ischeck')
==
'未审核'
||
oRecord.getData('tel1')
==
""
){
Dom.addClass(elTr,'mark');
}
return
true
;
}
//
设置数据源,数据最终会提供给表格处理
var
myDataSource
=
new
YAHOO.util.DataSource(config.url);
myDataSource.responseType
=
YAHOO.util.DataSource.TYPE_JSON;
myDataSource.responseSchema
=
{
resultsList:
"
records
"
,
//
服务端返回的数据
fields:[
//
配置数据列,格式化数据
{key:
"
id
"
, parser:
"
number
"
},
{key:
"
uucallId
"
, parser:
"
number
"
},
{key:
"
uucallName
"
},
{key:
"
privince
"
},
{key:
"
city
"
},
{key:
"
company
"
},
{key:
"
address
"
},
{key:
"
tel1
"
},
{key:
"
grad
"
},
{key:
"
coment
"
},
{key:
"
ip
"
},
{key:
"
ischeck
"
, parser:ischecked},
//
自定义格式化方法ischecked
{key:
"
createDate
"
, parser:formatDate},
{key:
"
privinceStr
"
},
{key:
"
cityStr
"
},
{key:
"
catalog.names
"
}
//
{key:"ac"}
],
metaFields:{
totalRecords:
"
totalRecords
"
}
}
var
pagnav
=
new
YAHOO.widget.Paginator({
containers:
"
pagnav
"
,
rowsPerPage:config.pageSize,
firstPageLinkLabel:
"
首页
"
,
lastPageLinkLabel:
"
末页
"
,
nextPageLinkLabel:
"
下一页
"
,
previousPageLinkLabel:
"
上一页
"
});
//
表格配置,initialRequest:初始的URL参数,用于分页的参数,dynamicData:是否动态获取数据,sortedBy:排序{key:排序字段,dir:升序:
CLASS_ASC,降序:
CLASS_DESC}
var
myConfigs
=
{
initialRequest:config.param,
dynamicData:
true
,
sortedBy:{key:
"
id
"
,dir:YAHOO.widget.DataTable.CLASS_DESC},
paginator:pagnav
//
分页导航,这里可以通过Paginator对象配置导航样式
//
formatRow: myRowFormatter
//
scrollable:true,
//
width:"80%"
};
//
创建一个带数据的表格.参数:(表格输出位置,列配置,数据源,表格配置)
var
myDataTable
=
new
YAHOO.widget.DataTable(
"
phoneTable
"
,myColumnDefs, myDataSource, myConfigs);
myDataTable.handleDataReturnPayload
=
function
(oRequest,oResponse,oPayload){
//
动态获取totalRecords,分页用
oPayload.totalRecords
=
oResponse.meta.totalRecords;
return
oPayload;
}
//
高亮行,鼠标移过时高亮作用
myDataTable.subscribe(
"
rowMouseoverEvent
"
, myDataTable.onEventHighlightRow);
myDataTable.subscribe(
"
rowMouseoutEvent
"
, myDataTable.onEventUnhighlightRow);
myDataTable.subscribe(
"
rowClickEvent
"
, myDataTable.onEventSelectRow);
//
标准行选择,支持多行选择
//
myDataTable.subscribe("rowClickEvent", function(){myDataTable.getSelectedRows;});
return
{
ds:myDataSource,
dt:myDataTable
};
}
//
给表格添加右健菜单,用于操作
YAHOO.uunav.buildMenu
=
function
(){
//
add context menu to table
var
onContextMenuClick
=
function
(p_sType,p_aArgs,p_myDataTable){
var
task
=
p_aArgs[
1
];
//
alert(1);
if
(task){
var
elRow
=
this
.contextEventTarget;
elRow
=
p_myDataTable.getTrEl(elRow);
var
oRecord
=
p_myDataTable.getRecord(elRow);
if
(elRow){
switch
(task.index){
case
0
:
tb_show('添加号码信息','${contextPath}
/
mng
/
phone
!
adminit.act
?
width
=
450
&
height
=
220
','
false
');
break
;
case
1
:
//
alert("edit"+oRecord.getData("id"));
tb_show('修改
-
'
+
oRecord.getData(
"
company
"
),'${contextPath}
/
mng
/
phone
!
adminit.act
?
width
=
450
&
height
=
220
&
form.id
=
'
+
oRecord.getData(
"
id
"
),'
false
');
break
;
case
2
:
if
(confirm(
"
您确定要删除这些记录吗?
"
)){
//
oRecord.getData("id")
$.ajax({
type:
"
POST
"
,
url:
"
${contextPath }/ajax/phone!del.act
"
,
data:
"
form.id=
"
+
oRecord.getData(
"
id
"
),
dataType:
"
json
"
,
success:
function
(data){
if
(data.message.result){
p_myDataTable.deleteRow(elRow);
//
先删服务器信息,成功后再删表格信息
}
}
});
}
break
;
case
3
:
alert(
"
UUNAV Administrator - V1.0
"
);
}
}
}
}
//
右健菜单
var
myContextMenu
=
new
YAHOO.widget.ContextMenu(
"
mycontextmenu
"
,
{trigger: table.dt.getTbodyEl()});
myContextMenu.addItem(
"
添加
"
);
myContextMenu.addItem(
"
修改
"
);
myContextMenu.addItem(
"
删除
"
);
myContextMenu.addItem(
"
关于
"
);
myContextMenu.render(
"
contextMenu
"
);
myContextMenu.clickEvent.subscribe(onContextMenuClick, table.dt);
return
myContextMenu;
}
代码中加了注释,可能看起来仍然有些吃力,建议边做边看.这样效果好.
官方API:
http://developer.yahoo.com/yui/docs/module_datatable.html
posted on 2009-02-07 21:25
菜板
阅读(2952)
评论(2)
编辑
收藏
所属分类:
YUI
评论
#
re: YUI-dataTable 服务端分页及动态排序 2011-08-15 10:39
jjk
查询怎么实现的呀,
app.myDataTable.load(app.myConfigs,app.generateRequest,function(data){
alert("jjk");
app.sqlWhere = "and t.ZGDWBM=? ";
app.values = new Array();
app.values[app.values.length]=app.ZGDWBM;
},app.myDataSource);
这个怎么改啊,有例子吗?
回复
更多评论
#
re: YUI-dataTable 服务端分页及动态排序
2013-09-09 16:48
wk
我的代码总是在{trigger: table.dt.getTbodyEl()});就断了
回复
更多评论
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
YUI - treeView 通过JSON结构的数据构建数据表格
YUI-dataTable 服务端分页及动态排序
<
2024年11月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
统计
随笔 - 2
文章 - 4
评论 - 2
引用 - 0
常用链接
我的随笔
我的文章
我的评论
我的参与
最新评论
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔分类
(2)
事件
(rss)
随(2)
(rss)
随笔档案
(2)
2009年2月 (2)
文章分类
(4)
ibatis
(rss)
jquery
(rss)
orther(1)
(rss)
spring
(rss)
struts
(rss)
YUI(2)
(rss)
数据结构(1)
(rss)
文章档案
(4)
2009年2月 (4)
收藏夹
(4)
apache+tomcat
(rss)
ibatis
(rss)
JAVA基础(2)
(rss)
jquery
(rss)
orther(2)
(rss)
spring
(rss)
struts
(rss)
YUI
(rss)
搜索
最新评论
1. re: YUI-dataTable 服务端分页及动态排序
我的代码总是在{trigger: table.dt.getTbodyEl()});就断了
--wk
2. re: YUI-dataTable 服务端分页及动态排序
评论内容较长,点击标题查看
--jjk
阅读排行榜
1. google每天都在变化(199)
2. 三只钟(152)
评论排行榜
1. google每天都在变化(0)
2. 三只钟(0)