Rails、Turbolinks 和微调器
Posted
技术标签:
【中文标题】Rails、Turbolinks 和微调器【英文标题】:Rails, Turbolinks and spinner 【发布时间】:2014-01-02 04:56:56 【问题描述】:我正在尝试用点击时的微调器替换文本链接。我有这个:
$(document).on('page:fetch', function(e)
$('.spinner').replaceWith( "<img src='<%= asset_path('layout/spinner.gif') %>'>" );
);
但很明显,所有带有 .spinner 类的链接都会获得微调器。我只想在 clicked 链接上进行替换,并且只有当它具有 spinner 类时。
有什么建议吗?
【问题讨论】:
让我看看我是否理解正确:当链接被点击时,你希望它被一个微调器替换吗? 是的!点击的链接(触发页面的链接:fetch)。 那些链接在被获取的页面部分内? 否 - 它们在链接所在的页面上: 1. 单击链接 2. 用微调器替换链接文本 3. 获取新页面 【参考方案1】:您将获得一些代码,这些代码会在 'page:load' 和 ready 事件上触发,以便它们适用于整页加载和 Turbolinks 页面加载。下面的代码将在被点击的 '.spinner' 上添加一个值为 true 的 'data-click' 属性。
#inside both the ready and 'page:load' events
$('.spinner').on('click', function(e)
$(this).attr('data-clicked', true);
);
下面的代码将查找具有值为 true 的 data-clicked 属性的“.spinner”,并在其上应用微调器图像。
$(document).on('page:fetch', function(e)
$('.spinner[data-clicked="true"]').replaceWith( "<img src='<%= asset_path('layout/spinner.gif') %>'>" );
);
如果有帮助,请告诉我。
【讨论】:
恐怕不行。什么都没发生。我认为单击事件处理程序的内容不会被触发。页面上的JS执行在执行之前就停止了。 @jriff 刚刚用不同的方法更新了我的答案。 是的!做到了(但您应该在顶部代码片段中将“data-click”更改为“data-clicked”)。 你能告诉我为什么这行得通而我的方法不行吗?我真的不明白为什么会有显着差异。 非常感谢您的回答 - 它确实帮了很多忙。享受赏金:)【参考方案2】:使用 on click 事件更改带有spinner
类的链接,这样当它们被点击时,它们会变成微调器:
$('.spinner').on("click", function()
$(this).replaceWith( "<img src='<%= asset_path('layout/spinner.gif') %>'>" );
);
那么,只有被点击的才会改变。
【讨论】:
恐怕这行不通。我试过了(令人难以置信的是,你想出的代码完全一样)。在替换内容之前加载下一页。我认为 Turbolinks 正在幕后做一些事情。我在我的问题中粘贴的代码有效 - 在页面更改之前显示微调器。但这会影响所有非本意的链接。以上是关于Rails、Turbolinks 和微调器的主要内容,如果未能解决你的问题,请参考以下文章
ajaxStart/turbolinks:click 在使用远程点击链接时不会触发:true
带有 mmenu/sidr 和 Jquery 和 Turbolinks 问题的 Rails
由于 pagesCached,Rails 4 Turbolinks 后退按钮和多个事件绑定
如何在 Rails 中搭配 Turbolinks 使用 Vue
Rails 4 + Turbolinks + JQuery Turbolinks + Coffeescript:事件被多次触发