问题标签 [turbo]
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.
turbolinks - 如何在 Turbo 链接执行之前等待刺激?
我正在使用 Turbo 和 Stimulus 来构建一个应用程序,但我试图了解这两者如何能够很好地结合在一起。
我有一个标准链接,它位于一个弹出菜单中(实际上是一系列菜单项链接)——这个弹出菜单是通过一些样式和轻量级 JS 动画的(感谢 Stimulus)。按预期打开和关闭弹出窗口,因为这些按钮不是 Turbo 知道的,但菜单项是链接,Turbo 确实管理这些。
因此,在我的 Stimulus 控制器的初始化方法中,我尝试为“turbo:before-render”绑定一个自定义事件处理程序,该处理程序首先调用 preventDefault,然后在最终使用 Turbo 提供的事件恢复方法之前处理关闭动画。
这几乎可以工作。事实上,在第一页加载这确实有效。但是第一次之后的每一次点击似乎都完全绕过了动画。
我在想有一种更好的方式让这两个库一起工作——这似乎是一种常见的情况。
如何在 Turbo 跟随链接之前等待动画?
linux - 了解 turbostat 调试模式最大涡轮输出
运行 turbostat --debug 的输出是否显示每个插槽每个内核的最大涡轮增压?下面是一个示例输出。如果我说一个 2 插槽服务器,这是否意味着每个插槽 2 个活动核心可以提升到 4GHz(总共 4 个核心)或通过两个插槽 - 所以每个插槽只有 1 个核心=总共 2 个核心?
我还假设这里的一个核心由 2 个 cpu 组成,即双插槽 20 核机器每个插槽有 40 个 cpu?
非常感谢任何帮助 - 谢谢!
ruby-on-rails - Rails Turbo 在页面重定向中删除 Hubspot 注入的 HTML
我在使用 Hotwire 和 turbo 设置的 Rails 应用程序中使用 Hubspot 聊天机器人。最初加载页面时,Hubspot 脚本会将一些 html 注入包含聊天机器人的页面正文中。一旦发生任何重定向,就会替换正文并删除注入的代码。
如何将注入的代码保留在正文中。我尝试将注入代码所在的脚本和区域包装在 adata-turbo="false"
中,但这不起作用。
symfony - 将 Mercure Hub 添加到 DDEV
我只是通过学习 Symfonys Turbo 实现来学习如何使用 Mercure。
我刚刚学习了 Symfonycasts Turbo 课程,并且通过 symfony 二进制文件/Symfony Local Web Server 使用 Turbo Streams 和 Mercure Hub 没有任何问题。
我的下一步是在我正在与我的团队合作的“真实”项目中尝试整个事情。
由于我们在团队中使用 DDEV 进行本地开发,因此我尝试将 mercure 实施到我的 DDEV 环境中。
我是 docker compose 和 DDEV 的新手,所以我只是尝试按照关于定义自定义服务的 DDEV 文档部分进行操作 ,其中说:
要为您的项目添加自定义配置或其他服务,请在 .ddev 目录中为您的项目创建 docker-compose 文件。ddev 将使用 docker-compose.[servicename].yaml 命名约定处理任何文件,并将它们包含在执行 docker-compose 功能中。
DDEV 文档还指出了以下步骤:
在为您的项目定义附加服务时,我们建议您遵循这些约定,以确保 ddev 处理您的服务的方式与 ddev 处理默认服务的方式相同。
然后我查看了Mercure 文档,他们提供了一个示例 docker-compose 服务定义,如下所示:
根据 DDEV 文档,我尝试修改示例配置,结果如下:
所以我所做的就是按照容器命名惯例加上两个标签加上只定义内部端口。
但这似乎不起作用,因为我无法访问 mercure hubs url,并且当我尝试在我的应用程序中使用 Mercure Hub 时,正如我之前成功所做的那样,使用 Symfony 服务器而不是 DDEv,我收到以下错误消息:
未能发送更新。
谁能帮我通过 DDEV 配置 Mercure 集线器?
显然,当我查看DDEV-contrib已经提供的内容时,这些内容似乎比我的更复杂。
这是他们为弹性搜索提供的示例配置:
我很感激任何帮助。
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 不知道在哪里附加新项目。
怎么了?
ruby-on-rails - Rails Turbo render_async:将 JWT 添加到异步请求
我在带有turbo-rails的 Rails 应用程序中使用render_async ,并尝试将 JWT 添加到 render_async 请求标头。
我的 application.rb 中有以下内容:
这是一个调用示例(它是循环的一部分):
我正在使用相同的 .js 文件加载 Turbo:https ://github.com/kirillplatonov/shopify-hotwire-sample/blob/main/app/javascript/shopify_app/shopify_app.js
我尝试在 shopify_app.js 中添加第二个监听器 turbo:load除了 turbo:before-fetch-request 之外,但这并没有做任何事情。
我在 Chrome Inspect 中看到 render_async 调用由 Turbo 处理,但它以 401 Unauthorized 的形式返回,我可以看到 JWT Bearer 证书不在 render_async GET 请求标头中。我还可以看到 JWT Bearer 证书在标准 GET 请求中,用于加载包含 render_async 调用循环的页面。
对于如何将 JWT Bearer 证书添加到使用 Turbo 的 render_async 调用的 http get 标头,我将不胜感激。
ruby-on-rails - Turbo 和 Datatables 初始化问题
我正在使用 rails 6 加载带有值的数据表。我的侧边栏如下所示:
我的数据表初始化为:
Rails 和 Datatables 的示例随处可见,例如:https ://www.driftingruby.com/episodes/datatables
我的问题:当我单击带有数据 {turbo:true} 的链接时,出现以下错误:
如果我使用数据禁用 turbo:{turbo:false},则数据表已正确初始化。
你以前见过这个吗?因为它让我发疯。为什么必须禁用涡轮增压才能工作?我完全感到困惑。
jquery - 如何设置 Rails UJS 和 Turbo?
我对运行旧的 jQuery 代码片段和 Rails UJS 以及 Turbo 到底需要做什么感到困惑。
DHH 在 6 月份添加了这个 PR,它本应提高兼容性,但它缺乏有关设置应如何工作的详细信息。
我的应用程序中仍然有一堆旧的 jQuery 和 UJS 片段,但我也在尝试迁移到 Turbo。我最初试图完全放弃 UJS,但一次太多了。此时,我正在使用 Webpacker 运行 Rails 6.1.4.1,并且我的 Gemfile 中没有任何 UJS gem。
升级页面说:
“Rails UJS 可以直接从 Rails 框架提供,也可以通过经典的 jquery-ujs 插件提供。”
这是否意味着 UJS 现在已内置到 Rails 中,而不是单独的 gem?或者我应该添加gem 'jquery-rails'
到我的 Gemfile 中吗?
我的 package.json 呢?我现在需要回去,yarn add jquery-ujs
如这里所示?
application.js 呢?我之前在这里导入了@rails/ujs,比如:
当我添加 Turbo 时,我注释掉了这些行。它们是必要的还是没有的?
关于 jQuery,我拼凑在一起(从其他网站粘贴)一种使用$
全局的方法:
这不再需要了吗?
编辑以包含 package.json 和 application.js 的依赖项部分...
package.json
application.js