【问题标题】:Where to put a js function that converts a table into a DataTable将表格转换为DataTable的js函数放在哪里
【发布时间】:2023-03-20 21:02:01
【问题描述】:

我在 Ruby on Rails 4 项目中使用了一个很棒的 jQuery 库,名为 DataTables。对于将标签转换为 DataTable 对象(设置自己的类和 ID)的函数,我有点困惑。我把它放在 application.js 文件中,因为我希望这个功能在大多数应用程序视图中都可用,其中大部分是报告,但我不知道这是否是正确的地方。它可以工作,但在 application.js cmets 中说:

//这里不建议直接加代码,如果加了, 出现在编译文件的底部。

var tabla =  $('.tabla-reporte').DataTable( {
        dom: 'Bfrtip',
        buttons: [
            {
                extend: 'print',
                autoPrint: false,
                customize: function ( win ) {
                    $(win.document.body)
                        .css( 'font-size', '10pt' )
                        .prepend(
                            '<img src="http://datatables.net/media/images/logo-fade.png" style="position:absolute; top:0; left:0;" />'
                        );

                    $(win.document.body).find( 'table' )
                        .addClass( 'compact' )
                        .css( 'font-size', 'inherit' );
                     var medias = win.document.querySelectorAll('[media="screen"]');
                     for(var i=0; i < medias.length;i++){ medias.item(i).media="all" };
                }
            }
        ]
    } );

显然运行该代码没有问题,因为如果它在当前加载页面的 DOM 中找不到类“tabla-reporte”,它不会对它做任何事情,但我只是不知道如果这符合“rails 约定”。

【问题讨论】:

    标签: jquery ruby-on-rails datatable


    【解决方案1】:

    您所要做的就是将以下代码添加到assets 目录中的任何.js 文件中。

    $(document).ready(function(){
        $('#myTable').DataTable();
    });
    

    此代码将使用 DataTables 转换任何具有 id = "myTable" 的表的样式。如果您有一些不想应用此样式的表格,那么只需给它一个不同的id。 Protip:如果您在同一页面上有多个表应该使用 DataTables 进行样式设置,那么您可以使用 class = "myTable" 代替。

    不要在您的application.js 文件中添加任何内容,除了:

    //= require dataTables/jquery.dataTables
    

    application.js 用于存储指令,而不是实际的脚本。当您的应用程序启动时,assets 目录中的所有内容都将聚合到一个大脚本中,因此您不必担心哪个.js 文件包含 DataTables 代码,除非您已设置控制器特定资产。

    【讨论】:

    • 这就是我一直在寻找的方式,并且有效。只是一个细节:我正在使用这个指令://= require datatables 也许是因为我使用的是更新的 DataTables(1.10.8 和一些新插件),你上面写的方式不起作用。另外,我注意到头部正在从其他控制器加载资产!为什么?
    • 您正在从不同的控制器加载资产,因为(正如我在回答的第二段中已经写过的)sprockets 将您的所有资产组合成一个大脚本。您是在使用 JQuery DataTables gem,还是尝试直接合并 DataTables 插件?
    • 我复制到 vendor/assets 目录,jQuery DataTables gem 没有最新版本,显然不包括我需要的扩展。我也尝试通过 rails-assets,但我没有找到合适的版本。
    • 你把数据表放在哪里了?在应用程序/资产或供应商/资产中?
    • vendor/assets/DataTables