gpt4 book ai didi

javascript - 在特定页面上执行 javascript 的正确 "Rails"方法

转载 作者:可可西里 更新时间:2023-11-01 02:34:12 26 4
gpt4 key购买 nike

我正在尝试在特定页面上运行 javascript,而我唯一的解决方案似乎是一种反模式。我在 assets/javascripts/ 中生成了 controller.js。我正在使用 gem 'jquery-turbolinks' 我的代码类似于以下内容:

$(document).ready(function () {
//Initiate DataTables ect..
}
)

此代码在每个页面上都会触发,所以我在其中添加了以下内容。

if ($('#page-specific_element').length > 0) {
//Initiate Datatables ect.
}

我的问题是,有没有一种方法可以将 rails 设置为仅使用特定 Controller 所需的 javascript 文件,或者元素搜索背后的逻辑门控是否是最佳解决方案?

最佳答案

这是一个非常好的 turbolinks 特定解决方案:

<body data-controller="<%= controller.controller_name %>" data-action="<%= controller.action_name %>">

// Instead of listening for document ready
$(document).on('users#show:loaded', function(){
$('#logger').append('<li>Users Show action loaded</li>');
});

// Instead of listening for document ready
$(document).on('users:loaded', function(){
$('#logger').append('<li>Some users controller method loaded</li>');
});

// Turbolinks fires "page:change" when it changes the page content.
// you could change this to just document ready if you are not using
// turbolinks.
$(document).on("page:change", function(){
var data = $('body').data();
$(document).trigger(data.controller + ':loaded');
$(document).trigger(data.controller + '#' + data.action + ':loaded');
});

// This is just for demonstration purposes...
$(document).trigger("page:change");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body data-controller="users" data-action="show">

<ul id="logger"></ul>
</body>

您应该注意,如果您使用的是 Turbolinks,那么您将拥有一个长期运行的、持久的 session 并保持状态。这意味着如果您在 View 中添加内联脚本标签或加载其他 javascript 文件,它们将留在浏览器内存中。

因此,您可能希望清除您在 page:before-unload 上创建的任何页面特定事件处理程序。

关于javascript - 在特定页面上执行 javascript 的正确 "Rails"方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30133766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com