jQuery、webpacker 和 Rails 6 事件监听器
Posted
技术标签:
【中文标题】jQuery、webpacker 和 Rails 6 事件监听器【英文标题】:jQuery, webpacker & Rails 6 event listener 【发布时间】:2021-01-19 15:43:45 【问题描述】:我有一个使用 SimpleForm 构建的 remote:true 表单,它呈现一个 JS 文件 create.js.erb
// customers/create.js.erb
...
$('#new_customer').trigger('customer:callback');
...
同时我在 packs/customer/form.js 中有一个监听器,它包含在 erb 视图中使用
<%=javascript_pack_tag 'customers/form'%>
// packs/customers/form.js
$(document).on('customer:callback', '#new_customer', function(data)
alert('Success');
);
永远不会触发事件侦听器,但是如果我将事件侦听器移动到 javascript/application.js,它就可以工作。知道为什么会发生这种情况吗?
【问题讨论】:
【参考方案1】:您应该首先使用trubolinks:load
事件。该事件在页面第一次加载和每次 turbolink 访问时被调用。
所以packs/customer/form.js
中的代码应该如下所示:
$(document).on("turbolinks:load", function ()
$("#new_customer").on("customer:callback", function(data)
alert("Success");
);
);
【讨论】:
这似乎不起作用,如果我将侦听器放在 application.js 中,代码运行良好,但如果它在包本身中则不会。我想我缺少导入声明或其他东西 我想我明白了。您的form.js
在packs/customer
中,但您输入的<%=javascript_pack_tag 'customerS/form'%>
应该是<%=javascript_pack_tag 'customer/form'%>
。以上是关于jQuery、webpacker 和 Rails 6 事件监听器的主要内容,如果未能解决你的问题,请参考以下文章
你如何让 JQuery 与 Rails 6 和 Webpacker 6 一起工作
通过 Webpack 在 Rails 中安装 jQuery 时未定义 $
Rails 6 + Webpack + jQuery 刷新时不保存更改