将 table 转换为 DataTable 的 js 函数放在哪里

Where to put a js function that converts a table into a DataTable

我在 Rails 4 项目的 Ruby 中为 jQuery 使用了一个名为 DataTables 的很​​棒的库。我对将标记转换为 DataTable 对象(设置自己的 classes 和 id)的函数放在哪里感到有点困惑。我把它放在 application.js 文件中,因为我希望这个功能在大多数应用程序视图中都可用,其中大部分是报告,但我不知道这是不是正确的地方。它有效,但在 application.js 评论中说:

// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the compiled file.

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 中找不到 class 'tabla-reporte',它就会获胜什么都不做,只是不知道这是否符合 "rails convention".

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

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

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

不要向 application.js 文件添加除以下内容以外的任何内容:

//= require dataTables/jquery.dataTables

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