在Lightning中使用Datatables实现表头固定(Fixed Header)和列固定(Fixed Columns)


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点中的结构去渲染就没问题了(别问这是啥原理,我是瞎试试出来的,没有原理)。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM