dataTables组件,数据表格组件。
目录
一、综述
二、DOM结构
三、样式
四、属性
五、方法
六、事件
七、操作
八、案例
一. 综述
dataTables组件用来展示网格数据,分页显示数据、可以使用CSS控制样式、可以排序、可以显示页脚汇总。
dataTables组件是jquery原生插件DataTables的扩展。getRow方法、onBeforeInit事件中的event.settings使用原生API。
组件路径:$UI/system/components/justep/dataTables/
组件标识:UI2/system/components/justep/dataTables/dataTables
二. DOM结构
- 典型dom结构
<div component="$UI/system/components/justep/dataTables/dataTables" flexibleWidth="true" rowActiveClass="active" xid="dataTables1" class="table table-hover table-striped" data="list"> <columns xid="columns1"> <column name="fID" xid="column3"/> <column name="fTitle" xid="column4"/> <column name="fState" xid="column5"/> </columns> </div>
三. 样式
- table
基础样式(必须)。
- table-hover(鼠标悬停高亮)、table-striped(条纹状)
背景样式。
- table-condensed
紧凑型显示。
- table-bordered
边框。
- x-dt-title-center、x-dt-title-left、x-dt-title-right、x-dt-title-justify
列头、单元格对齐方式。
四. 属性
组件具有公共属性,请参考组件公共属性
- data
[string]关联的data组件xid
- multiSelect
[boolean]使用checkBox多选,默认值:false
- showRowNumber
[boolean]显示行号,默认值:false
- ordering
[boolean]使用排序,默认值:true
- stateSave
[boolean]保存状态,默认值:false
- stateDuration
[string]保存状态时长,输入时长,如:“10”,也可以是“永久有效”,默认为:空
- responsive
[boolean]响应式,flexibleWidth=false时生效,默认值:false
- flexibleWidth
[boolean]表格宽度自适应于父容器,默认值:false
- scrollX
[string]水平滚动(非空有效),该属性可以是css设置,或者一个数字(作为像素量度来使用)
- scrollY
[string]垂直滚动(非空有效),该属性可以是css设置,或者一个数字(作为像素量度来使用),充满父容器可以使用100%
- scrollCollapse
[boolean]表格高自适应,配合scrollY使用,默认值:false
- rowActiveClass
[string]行选中的class,默认值:active
- rowAttr
[string]增加在行上属性的表达式,表达式执行结果返回Object,可以包含style、class属性,也可以增加自定义属性表达式中可以使用$model,$row(当前渲染的数据行对象)变量,如:
1、简单
{style:’height:80px;’,class:’…’}
2、根据数据设置不同底色
$row.val(‘fString’)==’北京’?{style:’background:red;’}:{style:’background:blue;’}
注:
修改值时不会刺激执行
- useFooter
[boolean]使用footer,默认值:false,打开后可以通过api:setFooterData设置footer显示内容
- disablePullToRefresh
[boolean]禁止下拉刷新,默认值:true
- disableInfiniteLoad
[boolean]禁止上划加载数据,默认值:true
- xid
[string]组件标示
五. 方法
组件具有公共方法,请参考组件公共方法
- addRow
void addRow (Row row)
增加行,这个方法一般不用调用,dataTables会自动感知data的数据变化,data新增行后dataTables会自动调用新增显示。
> 参数
row:[Row] data的行对象
> 返回值
void
- clear
void clear ()
清除DataTables组件所有行,这个方法一般不用调用,dataTables会自动感知data的数据变化,data清除后dataTables会自动调用清除显示。
> 返回值
void
- getCheckeds
list getCheckeds ()
返回多选选中的行
> 返回值
list rows 行数组
>例:
this.comp("dataTables1").getCheckeds();
- getData
Data getData ()
获取DataTables绑定的data对象
> 返回值
data
>例:
this.comp("dataTables1").getData();
- getDataRow
Data getDataRow (node node)
根据行html节点获取bind的Data行对象
> 参数
node:[node] html节点
> 返回值
row
>例:
//点击查看获取当前行的fTitle Model.prototype.dataTables1CellRender = function(event){ if(event.colName=="inventory"){ event.html="<a href='' class='v'>查看</a> <a href='' class='edit'>编辑</a>"; } }; Model.prototype.dataTables1RowClick = function(event){ var link=$(event.domEvent.target); if(link.hasClass("v")){ var fTitle=this.comp("dataTables1").getDataRow(link).val("fTitle"); } };
- getRow
TR getRow (Data.Row row)
根据行ID获取TR,不存在返回null
这个返回的对象是dataTables的行对象,可使用dataTables的原生api,详细参看datatables官网:
http://www.datatables.net/
http://www.datatables.net/reference/api/
> 参数
row:[Data.Row] 行
> 返回值
TR
>例:
//获取dataTables当前行对象 var rowObj=this.comp("dataTables1").getRow(data.getRowByID()); //获取fTitle var fTitle=rowObj.data().val("fTitle");
- getSelection
Data.Row getSelection ()
返回选中行
> 返回值
Data.Row
>例:
this.comp("dataTables1").getSelection();
- hideCol
void hideCol (string col)
隐藏列
> 参数
col:[string] 列名
> 返回值
void
>例:
this.comp("dataTables1").hideCol("fState");
- showCol
void showCol (string col)
显示列
> 参数
col:[string] 列名
> 返回值
void
>例:
this.comp("dataTables1").showCol("fState");
- isChecked
boolean isChecked (Data.Row row)
多选是否选中行,选中返回true,未选中返回false
> 参数
row:[Data.Row] 行
> 返回值
boolean
>例:
this.comp("dataTables1").isChecked(data.getRowByID());
- reload
void reload ()
重新加载DataTables组件,这个方法一般不用调用,dataTables会自动感知data的数据变化,自动重新加载。
> 返回值
void
- removeRow
void removeRow (Row row)
删除行,这个方法一般不用调用,dataTables会自动感知data的数据变化,data删除行后dataTables会自动调用删除显示。
> 参数
row:[Row] data的行对象
> 返回值
void
- setAllRowChecked
void setAllRowChecked (boolean checked)
设置所有行多选状态
> 参数
checked:[boolean] 选中状态
> 返回值
void
>例:
this.comp("dataTables1").setAllRowChecked(true);
- setFooterData
void setFooterData (object footerData)
设置footer数据
> 参数
footerData:[object] footer数据,格式为:{列名:数据,…},如:{sName:’合计:’,sInt:500}
> 返回值
video
>例:
this.comp('dataTables1').setFooterData({fTitle:'合计:',fState:'全部'});
- setRowChecked
void setRowChecked (Data.Row row, boolean checked)
设置行的多选状态
> 参数
row:[Data.Row] 行; checked:[boolean] 选中状态
> 返回值
void
>例:
this.comp("dataTables1").setRowChecked(data.getRowByID(),true);
- setRowCss
setRowCss (Row row, object css)
设置行的css
> 参数
row:[Row] 行对象; css:[object] 样式,同jquery格式,如:{height:100,width:50,…}
> 返回值
void
>例:
//单击行变色 Model.prototype.dataTables1RowClick = function(event){ this.comp("dataTables1").setRowCss(event.row,{"background-color":"yellow"}); };
- setSelection
void setSelection (Data.Row row)
设置选中行
> 参数
row:[Data.Row] 行
> 返回值
void
>例:
this.comp("dataTables1").setSelection(data.last());
- 构造方法
new dataTables(option)
动态创建dataTables组件
> 参数
option:构造dataTables的初始参数参考组件属性
> 返回值
dataTables组件
>例:
var dataTables = require("$UI/system/components/justep/dataTables/dataTables"); var parentNode = this.getElementByXid("window"); var option = { parentNode : parentNode, //dataTables的属性,设计时有的属性都可以设置 data : "list", class:'table table-hover table-striped', flexibleWidth : true, responsive : false, // 列定义 columns : [{"sName":"fID","xid":"column3"},{"sName":"fTitle","xid":"column4"} ,{"sName":"fState","xid":"column5"}] }; new dataTables(option);
- get
Object get (String name)
获取属性
> 参数
name:[String] 属性名,取值范围:data、rowActiveClass、rowAttr
> 返回值
Object
>例:
this.comp("dataTables1").get("data");
- set
void set (json arg)
设置属性值
>参数
arg:[json] 属性值对,结构如下:
{
“data” : 关联的data组件xid(只能在onBeforeInit事件中使用),
“rowActiveClass” : 行选中的class,默认值:active
“rowAttr” : 增加在行上属性的表达式,表达式执行结果返回Object,可以包含style、class属性,也可以增加自定义属性表达式中可以使用$model,$row(当前渲染的数据行对象)变量
}
> 返回值
void
>例:
this.comp("dataTables1").set({ "data":"listData", "rowActiveClass":"current" "rowAttr":"$row.val('fID')=='1'?{style:'background:red;'}: {style:'background:blue;'}" });
六. 事件
- public void onBeforeInit (object event)
创建DataTables组件前事件
event结构如下:
“source” : 组件的js对象,
“bindingContext” : 组件绑定的上下文,包含$model、$object等具体请参考bindingContext说明
“settings” : 创建DataTables的参数
}
>例:
//修改dataTables的属性 Model.prototype.dataTables1BeforeInit = function(event){ event.source.set({"data":"listData"}); };
- public void onInit (object event)
创建DataTables组件事件
event结构如下:
“source” : 组件的js对象,
“bindingContext” : 组件绑定的上下文,包含$model、$object等具体请参考bindingContext说明
}
>例:
//隐藏fState列 Model.prototype.dataTables1Init = function(event){ event.source.hideCol("fState"); };
- public void onCellRender (object event)
单元格显示渲染
event结构如下:
“source” : 组件的js对象,
“bindingContext” : 组件绑定的上下文,包含$model、$object等具体请参考bindingContext说明
“rowID” : 行ID
“row” : 行
“html” : 输出显示的html,通过修改html影响展现
“colVal” : 列的值
“colName” : 列名
}
>例:
//修改某列的内容 Model.prototype.dataTables1CellRender = function(event){ if(event.colName == "inventory"){ event.html = "<a href='' cass='view'>查看</a>"; } };
- public void onFooterRender (object event)
Footer显示渲染,组件初使化前和初使化后触发
event结构如下:
“source” : 组件的js对象,
“bindingContext” : 组件绑定的上下文,包含$model、$object等具体请参考bindingContext说明
“tfoot” : tfoot dom对象
“data”: 绑定的data对象,
“start”: 数组中当前显示的起点,
“end” : 数组中当前显示终点,
“display” : 所有数据数组的显示位置
}
>例:
//设置Footer数据 Model.prototype.dataTables1FooterRender = function(event){ event.source.setFooterData({fTitle:'合计:',fState:'全部'}); };
- public void onHeaderRender (object event)
Header显示渲染,组件初使化前和初使化后触发
event结构如下:
“source” : 组件的js对象,
“bindingContext” : 组件绑定的上下文,包含$model、$object等具体请参考bindingContext说明
“thead” : thead dom对象
“data”: 绑定的data对象,
“start”: 数组中当前显示的起点,
“end” : 数组中当前显示终点,
“display” : 所有数据数组的显示位置
}
>例:
//获取header并隐藏 Model.prototype.dataTables1HeaderRender = function(event){ $(event.thead).hide(); };
- public void onLoaded (object event)
DataTables组件加载完成事件
event结构如下:
“source” : 组件的js对象,
“bindingContext” : 组件绑定的上下文,包含$model、$object等具体请参考bindingContext说明
}
>例:
//获取当前对象 Model.prototype.dataTables1Loaded= function(event){ event.source; };
- public void onRowCheck (object event)
多选勾选选中时事件,可以使用cancel取消
event结构如下:
“source” : 组件的js对象,
“bindingContext” : 组件绑定的上下文,包含$model、$object等具体请参考bindingContext说明
“rowID” : 对应的行ID
“row” : 对应的行
“checked”: 勾选状态
“cancel”: 取消当前操作
}
>例:
//获取当前选中行ID Model.prototype.dataTables1RowCheck = function(event){ event.rowID; };
- public void onRowChecked (object event)
多选勾选选中后事件
event结构如下:
“source” : 组件的js对象,
“bindingContext” : 组件绑定的上下文,包含$model、$object等具体请参考bindingContext说明
“rowID” : 对应的行ID
“row” : 对应的行
“checked”: 勾选状态
}
>例:
//获取当前选中行ID Model.prototype.dataTables1RowChecked = function(event){ event.rowID; };
- public void onRowCheckedAll (object event)
多选勾选全选中后事件
event结构如下:
“source” : 组件的js对象,
“bindingContext” : 组件绑定的上下文,包含$model、$object等具体请参考bindingContext说明
“checked”: 勾选状态
}
>例:
//获取全选框的选中状态 Model.prototype.dataTables1RowCheckedAll = function(event){ evnet.checked; };
- public void onRowClick (object event)
单击行事件
event结构如下:
“source” : 组件的js对象,
“bindingContext” : 组件绑定的上下文,包含$model、$object等具体请参考bindingContext说明
“domEvent” : 触发的dom event对象
“rowID” : 对应的行ID
“row” : 对应的行
}
>例:
//获取触发的对象并判断 Model.prototype.dataTables1RowClick = function(event){ var link=$(event.domEvent.target); if(link.hasClass("current")){} };
- public void onRowDblClick (object event)
双击行事件
event结构如下:
“source” : 组件的js对象,
“bindingContext” : 组件绑定的上下文,包含$model、$object等具体请参考bindingContext说明
“domEvent” : 触发的dom event对象
“rowID” : 对应的行ID
“row” : 对应的行
}
>例:
//获取选中行ID Model.prototype.dataTables1RowDblClick = function(event){ event.rowID; };
- public void onRowSelect (object event)
选中行事件
event结构如下:
{
“source” : 组件的js对象,
“bindingContext” : 组件绑定的上下文,包含$model、$object等具体请参考bindingContext说明
“rowID” : 行ID
“row” : 行
}
>例:
//获取选中行ID Model.prototype.dataTables1RowSele = function(event){ event.rowID; };
- public void onFilter (FilerEvent event)
数据行过滤事件,通过修改event.data影响数据
event结构如下:
“source” : 组件的js对象,
“bindingContext” : 组件绑定的上下文,包含$model、$object等具体请参考bindingContext说明
“datas”: 数据行数组
}
>例:
//获取data数据行数组 Model.prototype.dataTables1Filter= function(event){ event.datas; };
七. 操作
- (无)
八. 案例
1、批量删除
- 增加dataTables组件、data组件
- 设置dataTables组件属性:绑定显示的data数据,multiSelect改为true(显示多选框)
- 在组件上点右键,选择添加列,选择要显示的列,点确定按钮。
- 增加button组件,绑定onclick事件
- 在onclick事件,实现获取多选行对象并删除
代码示例:
<div component="$UI/system/components/justep/dataTables/dataTables" flexibleWidth="true" useFooter="true" showRowNumber="false" xid="dataTables1" rowActiveClass="active" class="table table-hover table-striped" data="list" multiSelect="true"> <columns xid="columns1"> <column name="fID" xid="column3" className="x-dt-cell-center"/> <column name="fTitle" xid="column4"/> <column name="fState" xid="column5" width="40" className="x-dt-cell-center"/> </columns> </div>
Model.prototype.delBtnClick = function(event){ var checkedRows=this.comp("dataTables1").getCheckeds(); this.comp("list").deleteData(checkedRows); };
2、显示按钮、链接
- 增加dataTables组件、data组件,给data组件增加一列fOperate,用于显示操作按钮
- 设置dataTables组件属性:绑定显示的data数据
- 在组件上点右键,选择添加列,选择要显示的列,点确定按钮
- dataTables组件增加onCellRender事件
- 显示按钮——onCellRender事件中的event.html可以控制单元格的展现,给event.html设置为<button>,就可以展现出按钮
- 显示链接——onCellRender事件中的event.html可以控制单元格的展现,给event.html设置为<a>,就可以展现出链接
- 在添加的按钮和链接的单击事件中获得model对象的方法
- v3.3版本及以前:使用justep.Bind.contextFor(this).$model
- v3.4版本及以后:使用justep.Util.getModel(this)
代码示例:
<div component="$UI/system/components/justep/dataTables/dataTables" flexibleWidth="true" rowActiveClass="active" class="table table-hover table-striped" xid="dataTables1" useFooter="false" multiSelect="false" showRowNumber="false" data="list" onCellRender="dataTables1CellRender" onRowClick="dataTables1RowClick"> <columns xid="columns1"> <column name="fID" xid="column3" className="x-dt-cell-center"/> <column name="fTitle" xid="column4"/> <column name="fState" xid="column5" width="40" className="x-dt-cell-center"/> <column name="fOperate" xid="column6" label="操作" width="40" className="x-dt-cell-center"/> </columns> </div>
Model.prototype.dataTables1CellRender = function(event){ if(event.colName=="fOperate"){ event.html = "<button class='btn btn-default btnDel' onclick='justep.Bind.contextFor(this).delData(event,"" + event.rowID + "")'>删除</button>"; //上面这句代码中,第一个event是onclick的dom事件对象,第二个event是onCellRender的事件对象,this是button这个节点 } }; Model.prototype.delData = function(event, rowid) { var row = this.comp("mainData").getRowByID(rowid); this.comp("mainData").deleteData(row); event.stopPropagation();//停止事件的传播,否则还会出发RowClick事件 };
本文由WeX5君整理,WeX5一款开源免费的html5开发工具,H5 App开发就用WeX5!
阅读其他app 开发相关文章:http://doc.wex5.com/?p=3443
评一波