2017-03-30 47 views
1

在每个页面加载上运行if语句以检查是否应该运行脚本是不是一个好主意。例如,我有一个非常长的JavaScript文件,只需要在使用表单时运行。但目前在我的每个文件中,我都包含了document.addEventListener("turbolinks:load", function()这意味着它可以在每一页上加载。如果在某些页面上运行脚本 - 导轨

在我的剧本,我很想在文件的开头,像这样写一个if语句:

document.addEventListener("turbolinks:load", function() { 
    controller = $('body').data('controller') 
    action = $('body').data('action') 
    if controller == foo && action == bar 
    runScripts(); 
    else 
    return; 
    function runscripts() { 
    ... 

我还是有点新的使用JavaScript与轨道,所以我不知道的另一办法。有什么建议么?

回答

4

您可以使用控制器操作名称来限定布局的正文元素。

<body class="<%= controller_name %> <%= action_name %>"> 
    <%= yield %> 
</body> 

现在通过使用我们添加到布局主体的类,我们可以限制页面的某些功能。

$(document).on("turbolinks:load", function() { 
    if (!($(".foo.bar").length > 0)) { 
    return; 
    } 
    //--- page specific js code after above condition --- 
}); 

在这种情况下,一个小的条件可以防止页面特定的行为在页面上被触发,而不应该被触发。

为了更加清晰,请阅读this