问题标签 [hotwire-rails]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - Rails + Hotwire:为什么我的链接在单击时会消失?
我正在尝试将 Hotwire/Turbo 合并到现有的 Rails 应用程序中。我已将涡轮帧添加到一个简单的编辑页面,但现在当我单击后退按钮时,它会消失,而不是带我到目标页面。链接很简单link_to "Back", my_model_show_path(model_instance)
。
我看到网络请求发生了,并且成功了。DevTools 的 Network 选项卡中的页面预览显示正在加载并呈现为 html 的正确页面。浏览器只是不会将我带到新位置。
我如何使这项工作像以前一样?我觉得即使我使用的是 Hotwire/Turbo,我也应该能够使用常规链接重定向应用程序中的任何位置。
ruby-on-rails - Hotwire Rails - 无法在模块外使用导入语句
我在现有的 Rails 项目中安装了 hotwire-rails。在编写任何与热线相关的代码之前,我在每个页面的浏览器控制台上都会收到以下错误:
Uncaught SyntaxError: Cannot use import statement outside a module
在application.debug-86...95.js:53462
错误所指的行是这样的:
我正在使用带有 Sprockets 的 Rails 6.1.3.1 作为资产,我之前只在使用 webpack 的 Rails 项目中使用过热线,所以不确定这是否与它有关。
ruby-on-rails - Hotwire turbolinks 和事件监听器的问题
嗨,我的事件监听器有问题,我正在使用 turbolinks,我的监听器看起来像:
document.addEventListener("turbolinks:load", ...
当我第一次访问页面时,我在浏览器控制台中得到这个错误:
Uncaught TypeError: Cannot read property 'children' of null
。重新加载后一切正常。我想这是异步的问题,但我不知道如何以明智的方式解决这个问题。
ruby-on-rails - 使用 Rails 和 Hotwire 提交表单时出错
我正在使用热线运行 rails 6.1。我正在创建一个登录表单,获取电子邮件和密码,然后重定向到 store_index 路径。但是,我遇到了这个错误——错误:表单响应必须重定向到另一个位置。我尝试了以下事情,但得到了同样的错误,
使用
format.html { redirect_to store_index_path}
我注释掉了 create 函数中的所有内容并添加了 puts "Hello"。但是,我仍然遇到同样的错误。
我现在很困惑,任何帮助
会话控制器.rb
ruby-on-rails - 在多个地方使用刺激控制器
我希望能够在 Web 应用程序的多个位置使用刺激控制器。我想做这样的事情:
但是控制器似乎只是连接到第一个组件而不是第二个。是否可以按照我的意图使用它?
谢谢!
javascript - 将刺激和导入映射添加到现有 Rails 6.1 应用程序
我有一个 Rails 6.1 应用程序,它是从 Rails 4 -> 5 -> 6 升级的,所以它很成熟。
它仍然使用资产管道,并且随着 Rails 7.0 的未来,我将保持这种方式。我想开始使用stimulus + importmaps,所以我跟着安装。
通过热线安装导入映射和刺激后,我在加载我的应用程序时在 Firefox 91 中收到以下错误;
我的 importmap.rb
我已将所有 javascript 保存在 app/assets/javascripts 目录中,该目录仍应由资产管道处理。
我有以下 app/assets/javascripts/importmap.json.erb
application.js 是;
我的 application.html.erb 中也有以下行
manifest.js 是;
编辑
检查 Chrome 中的 Elements 选项卡,我已经加载了 es-module-shims 但在 Firefox 中我仍然收到错误;
这是加载 es-module-shim 的代码
编辑
可以安全地忽略以下错误;
参考:https ://github.com/rails/importmap-rails#expected-errors-from-using-the-es-module-shim
编辑
当我将 application.html.erb 头更改为以下内容时,另一个错误消失了
ruby-on-rails - Rails Turbo 在页面重定向中删除 Hubspot 注入的 HTML
我在使用 Hotwire 和 turbo 设置的 Rails 应用程序中使用 Hubspot 聊天机器人。最初加载页面时,Hubspot 脚本会将一些 html 注入包含聊天机器人的页面正文中。一旦发生任何重定向,就会替换正文并删除注入的代码。
如何将注入的代码保留在正文中。我尝试将注入代码所在的脚本和区域包装在 adata-turbo="false"
中,但这不起作用。
ruby-on-rails - 无法提交由 Rails Turbo Frame 响应绘制的表单
turbo_frame 内的表单被阻止再次提交。
当前页面和表单操作都是相同的路径。我看到表单现在必须重定向到新位置或返回错误代码:turbo/pull/39。
我在每个索引视图上都有一个表单,向索引操作发送 GET 请求,它根据 url 查询参数过滤记录。这很好用。这在最新的 Rails 中不再可能了吗?是否有可以在此处应用的解决方法,以避免为表单操作创建新路线?
这些是幂等过滤/搜索请求,因此是 GET 方法。表单是收集和发送过滤器值的便捷方式。在这种情况下,带有 Hotwire 的 Rails 坚持重定向是否正确/有意?
更新:
如果我将表单提交为 xhr 而不是使用 Turbo,它会起作用。我在表格中添加local: false
和data-turbo: false
。然后添加 index.js.erbdocument.getElementByID(<id of turbo frame>)
并将其设置outerHTML
为呈现的部分。不确定这是否会由于不推荐使用的 ujs 功能而停止工作(也许mrujs可以介入)。
ruby-on-rails - 如何使用 Turbo/Stimuls 为新记录插入表单?
Rails 的未来似乎正在从 UJS 转向 Turbo 和 Stimulus。但是,与老式的 UJS 相比,某些功能似乎需要更多的代码和更多的工作。
例如:要插入允许创建新记录的内联表单,您可以创建如下链接:
然后,在控制器中:
最后是一个 new.js.erb 视图,其中包含为响应新操作而要执行的内容(表单)。
有人会认为只需响应以下内容即可轻松转换为 Turbo:
然后将 new.js.erb 更改为 new.turbo_stream.erb,内容如下:
但是,Turbo Streams 不处理 GET 请求。所以,这种方法是行不通的。
我的问题是:Rails 7 的处理方式是什么?我不认为 UJS 是答案,因为 Turbo 和 Stimulus 正在“取代”UJS 功能。也许,答案是使用 Stimulus 插入新表单,然后当表单在创建操作中成功时,使用流在 POST 请求之后插入后续新记录。但是,这似乎比 UJS 是/过去的工作要多得多。这让我觉得必须有一种更简单、更流畅、更少代码的方式来处理这个问题。
ruby-on-rails - Hotwire 未更新项目列表
我在我的 Rails 应用程序中设置了 Hotwire,但它不会使用项目更新索引视图。我有一个简单的项目视图:
有一个projects/_project.html.erb
部分,它只显示带有涡轮框架的单个项目:
在project
模型中,我添加了流:
现在,当我在控制台中添加一个项目时,我看到它正在广播:
但是在浏览器的视图中没有添加项目。只有在浏览器页面刷新后才会显示项目。
广播本身似乎很好,但 Rails 不知道在哪里附加新项目。
怎么了?