gpt4 book ai didi

javascript - Rails View 中的 Javascript 问题

转载 作者:行者123 更新时间:2023-12-03 12:04:31 26 4
gpt4 key购买 nike

在我的 Rails View 模板中,我使用一些 jQuery 来实现选项卡式面板功能:

<section>
... content ommitted
</section>
<script>
$(document).ready(function () {
$('.accordion-tabs-minimal').each(function(index) {
$(this).children('li').first().children('a').addClass('is-active').next().addClass('is-open').show();
});

$('.accordion-tabs-minimal').on('click', 'li > a', function(event) {
if (!$(this).hasClass('is-active')) {
event.preventDefault();
var accordionTabs = $(this).closest('.accordion-tabs-minimal')
accordionTabs.find('.is-open').removeClass('is-open').hide();

$(this).next().toggleClass('is-open').toggle();
accordionTabs.find('.is-active').removeClass('is-active');
$(this).addClass('is-active');
} else {
event.preventDefault();
}
});
});
</script>

因为我也在其他 View 模板中使用此脚本,并且我想更好地组织我的 Javascript,所以我在 app/assets/javascripts 下创建了一个 Javascript 文件 (tabbed_pa​​nels.js),并将上述脚本移至tabbed_pa​​nels.js 文件。

但是,现在我的页面上的面板在第一次加载页面时没有内容。仅当刷新页面时,面板才会加载内容。

有人知道发生了什么以及如何解决这个问题,以便我的选项卡式面板在第一页加载时有内容吗?

感谢您的帮助,

安东尼

最佳答案

涡轮链接

您可能遇到的问题是您正在尝试加载 $(document).ready在 Turbolinks 运行时运行。

这根本行不通(如果您使用 Turbolinks),因为 Turbolinks 仅刷新 <body>页面的标签,它通常会阻止你的 JS 绑定(bind)到 DOM 中的各种元素。 ,因为JS还没有重新加载

解决这个问题的方法是围绕 Turbolinks 开发 JS(使用 Turbolinks' event handlers ):

#app/assets/javascripts/tabbed_panels.js
var new_items = function() {
$('.accordion-tabs-minimal').each(function(index) {
$(this).children('li').first().children('a').addClass('is-active').next().addClass('is-open').show();
});

$(document).on('click', '.accordion-tabs-minimal li > a', function(event) {
if (!$(this).hasClass('is-active')) {
event.preventDefault();
var accordionTabs = $(this).closest('.accordion-tabs-minimal')
accordionTabs.find('.is-open').removeClass('is-open').hide();

$(this).next().toggleClass('is-open').toggle();
accordionTabs.find('.is-active').removeClass('is-active');
$(this).addClass('is-active');
} else {
event.preventDefault();
}
});
});

$(document).on("page:load ready", new_items);

应该允许在页面加载时填充您的选项卡,无论 Turbolinks 是否正在运行。

--

不引人注目的 JS

还有一点需要考虑(您已经这样做了),那就是您确实需要使用 unobtrusive javascript在您的应用程序中。

不显眼的 JS 基本上意味着您能够将页面的“绑定(bind)”抽象到 Assets 管道中的 Javascript 文件。造成这种情况有几个重要原因:

  • Your JS can be loaded on any page you want (it's DRY)
  • Your JS will reside in the "backend" of your app (won't pollute views)
  • You'll be able to use the JS to populate the various elements / objects you want on screen

总是建议您将 JS 放入单独的文件中 - 包括在 View 中会让您陷入困惑

关于javascript - Rails View 中的 Javascript 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25239174/

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