1.引入Datatables:
component:
<ltng:require
styles="{!join(',',
$Resource.DataTables + '/DataTables-1.10.22/css/jquery.dataTables.min.css',
$Resource.DataTables + '/FixedHeader-3.1.7/css/fixedHeader.dataTables.min.css',
$Resource.DataTables + '/FixedColumns-3.3.1/css/fixedColumns.dataTables.min.css'
)}"
scripts="{!join(',',
$Resource.jQuery,
$Resource.DataTables + '/DataTables-1.10.22/js/jquery.dataTables.min.js',
$Resource.DataTables + '/FixedHeader-3.1.7/js/dataTables.fixedHeader.min.js',
$Resource.DataTables + '/FixedColumns-3.3.1/js/dataTables.fixedColumns.min.js'
)}"
afterScriptsLoaded="{!c.scriptsLoaded}"/>
afterScriptsLoaded方法随便写一个就行,但是不能不写。
controller:
scriptsLoaded: function(component, event, helper) {
$("document").ready(function(){
console.log("jQuery load complete.");
});
}
2.数据加载完毕以后,等一会儿再使用Datatables初始化table。(即使在render event中去渲染有时也会出现问题)
controller:
doInit: function(component, event, helper) {
……(retrieve data code here)……
setTimeout(function(){
helper.initDataTable();
}, 500);
}
3.注意使用CLASS选择器而不要使用ID选择器(具体为什么不知道,反正这么干就对了)
component:
<table class="myTableForEdit">……</table>
helper:
initDataTable: function(){
// 重点来了,严格按这个顺序去初始化你的table(具体为什么不知道,反正这么干就对了)
if( $.fn.dataTable.isDataTable('.myTableForEdit') === false ){
$('.myTableForEdit').DataTable({
destroy: true,
info: false,
ordering: false,
paging: false,
searching: false,
scrollX: true,
scrollY: "400px",
scrollCollapse: true,
fixedHeader: true,
fixedColumns: {
leftColumns: 7
}
});
}else{
$('.myTableForEdit').DataTable().destroy();
$('.myTableForEdit').DataTable({
destroy: true,
info: false,
ordering: false,
paging: false,
searching: false,
scrollX: true,
scrollY: "400px",
scrollCollapse: true,
fixedHeader: true,
fixedColumns: {
leftColumns: 7
}
});
}
}
}
4.扩展资料:
https://datatables.net/manual/tech-notes/3
Datatables不允许重复渲染table,给了retrieve和destroy两个解决方案,感兴趣可以研究一下。
但是由于lightning结构特别怪异,渲染完全看心情那种,所以试了一下retrieve:true和destroy:true都不能解决问题。
但是按照第3点中的结构去渲染就没问题了(别问这是啥原理,我是瞎试试出来的,没有原理)。