将 Hotwire 集成到现有 Rails 项目中的问题

问题描述

我刚刚加入这个社区,这是我的第一篇文章

我一直在关注几个 Hotwire 教程,并使用该技术构建了一些原型。与 JS 前端框架相比,以更低的复杂性获得类似 SPA 的响应能力是多么容易,这给我留下了深刻的印象。

然而,我发现当我尝试将代码和流程从我的原型转换到我现有的 Rails 项目时,它根本不起作用。更糟糕的是,我不知道为什么。

我尝试使用以下一般过程编写一些跟踪代码

  1. 包括 Hotwire gem
  2. 通过终端命令安装 Hotwire
  3. 包括来自相关模型的广播
  4. 在视图级别应用 turbo_stream_from 标记作为侦听器
  5. 在您希望更新模型数据的位置包含 turbo_frame_tag

这在我的原型中可靠地工作,但在我现有的项目中不起作用。我怀疑这可能是因为我现有的项目没有使用最新版本的 Rails 或 Ruby? (事实证明,升级也不容易。)我目前使用的是 Ruby 版本 2.7.1 和 Rails 版本 6.0.2。

我知道我应该提供一些我的项目代码,但我什至不知道从哪里开始。如果有人能够为我提供一些指导,我将不胜感激。谢谢!

编辑:如果有帮助的话,这些是我在尝试让 Hotwire 自动更新索引页面上的模型实例列表时收到的终端消息类型。似乎广播正在运行,但我的听众却没有?

Terminal messages when committing database changes

story index page

Code in story partial

code in my story model

EDIT: HTML Source via Chrome dev tools

解决方法

我想到的一件事是您的流响应中有一个 <turbo-frame-tag>,这是为什么呢?我不确定这是否是无法正常工作的原因,但查看他们的 examples 流模板不应包含框架标记,它应该是这样的:

<turbo-stream action="append" target="dom_id">
    <template>
         Content to append to container designated with the dom_id.
    </template>
</turbo-stream>

您确定页面上有一些带有 id="stories" 的 div 吗?这是流正在寻找要附加到的元素;如果找不到,就什么都不会发生。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...