Rails Turbo 框架没有部分?

问题描述 投票:0回答:1

我是 Rails Turbo Frames 的新手,所以我的想法可能是错误的。

我确实有以下涡轮框架,在我的索引页面之一上显示了一个

event
,它具有布尔属性
scheduled

<%= turbo_frame_tag dom_id(event, :toggle) do %>
  <%= button_to event_path(event), method: :patch, params: { event: { schedule: !event.scheduled } }, class: "toggle-btn" do %>
    <%= event.scheduled ? "cancel event" : "schedule event" %>
  <% end %>
<% end %> 

按下按钮时,事件实例会正确更新,但 Rails 显示“内容缺失”,因为补丁调用不会返回带有

turbo_frame_tag
本身的 html(对吗?)。

如何以最经济的方式解决这个问题?有没有办法告诉 Rails Turbo 帧标签内容只需要使用更新的事件实例重新渲染?

我真的需要一个自定义补丁路由,它会在匹配的

turbo_frame_tag
中呈现部分内容(基本上与索引页面中已有的相同)?

我希望不要使用 Turbo Stream 来完成如此简单的任务。

ruby-on-rails hotwire-rails turbo-frames
1个回答
0
投票

正如 @alex 在评论中所写,推荐的方法是在补丁完成后重定向到正确的页面。

为什么?
Turbo 应该是渐进增强。因此,最好先像没有 Turbo 一样编写代码。在这种情况下,补丁后会发生什么?可能是

redirect_to index_path
(或者可能是
redirect_back_or_to index_path
)。因此,在没有 Turbo 的简单请求响应应用程序中,这种行为是正确的。
当我们添加 Turbo 并使用 Turbo-frame 进行混合时,我们将获得用户增强 - 仅 Turbo-frame 的内容将被更改,而我们不需要做太多事情。

Turbo 8 为我们提供了可选的 morphing,它允许基本相同的行为,而无需添加

turbo-frame
。这是值得研究的,因为它创建了效果(内容更新而无需用户“硬刷新”),而无需任何进一步的开发工作(您不需要指定涡轮帧,您不必担心内容丢失)。

您问的是最经济的方式。我不确定你的意思。
上面的建议在开发工作和维护方面是最经济的,并且对于用户来说速度相当快,但是如果您希望/需要最小化通过线路发送的数据(通常情况并非如此),您将需要投入更多的工作 - 可能您想要使用 Turbo Streams,因此您的补丁请求会返回 Turbo Stream 响应,仅包含新内容进行替换。要了解有关 Turbo 流的更多信息,请阅读 Turbo 手册

所以,总结一下:

  1. 首先编写应用程序,因为您没有任何涡轮 - 简单的重定向
  2. 然后选择您想要使用的 Turbo 功能 - 变形(无需额外代码,最神奇)、从完整响应替换 Turbo 帧(仅添加一个 Turbo 帧)、turbo 流响应(最少数据传输,最多添加代码) .

希望这有帮助。对我来说,Turbo 确实非常适合制作精美的交互式 UI,无需太多工作,并且使用零自定义 JS,但需要一些时间来了解一切是如何工作的。我多次阅读了手册,有些事情只有在真正做了之后才明白(有些还没有)。

© www.soinside.com 2019 - 2024. All rights reserved.