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點中的結構去渲染就沒問題了(別問這是啥原理,我是瞎試試出來的,沒有原理)。