简介
我认为能够反映我兄弟DHH发布的Hotwire和Websocket的实时更新会很方便,但是当我触摸了片刻后,我想知道
您可以通过参考官方视频并与Hotwire建立实时聊天来想象Hotwire的基础知识。
结论
制成了什么
https://github.com/blueplanet/hotwire-scaffold
-
我能够通过直接在索引中显示输入表单来制作SPA
-
我想安装引导程序并使用模式来完成输入表单,但是我可以获取HTML,但是それを受けてから modal を表示する 我做得不好,所以我放弃了 del> -
在turbo v7.0.0-beta.2中,即使在状态代码异常的情况下也会做出响应,因此
stimulus 和turbo 可以用于实现成功したら modal をクローズ;エラーの場合そのまま 。
-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # controller にエラー時の `render :new` に `status: :unprocessable_entity` 追加 def create @post = Post.new(post_params) respond_to do |format| if @post.save format.html { redirect_to @post, notice: 'Post was successfully created.' } format.json { render :show, status: :created, location: @post } else format.html { render :new, status: :unprocessable_entity } format.json { render json: @post.errors, status: :unprocessable_entity } end end end # form に turbo:submit-end イベントに `modal#close` メソッドを紐づく <%= form_with(model: post, data: { controller: "modal", action: 'turbo:submit-end->modal#close' }) do |form| %> # modal の close アクションに `event.detail.formSubmission.result.success` で結果を判定できる close(event) { if (event.detail.formSubmission.result.success) { $('#post-modal').modal('hide') } } |
-
SPA兼容点
-
使用
turbo_frame_tag 'post_form' ,您几乎可以在不更改现有视图的情况下进行操作 -
通过将
data: { turbo_frame: 'post_form' } 添加到link_to ,具有与上述turbo_frame_tag 相同的HTML id(post_form )的元素将从链接的响应中替换。 - https://github.com/blueplanet/hotwire-scaffold/blob/master/app/views/posts/index.html.erb
-
印象数
-
hotwire-rails只是设置了turbo-rails和stimulus-rails的组合,主要工作是
turbo-rails 。 -
turbo 仅针对5种类型的运动append / prepend / replace / update / remove 定义,其他运动是stimulus ,感觉就像在努力。 - 您可以通过使用更新过程作为触发器来广播该过程以更新视图,但是当需要多个过程时,如何限制过程的顺序尚不知道。
-
stimulus 尚未被很好地理解
好地方
-
通过简单地组合
turbo_frame_tag 和data: { turbo_frame: 'post_form' } ,我能够将现有的脚手架生成的视图转换为SPA。 -
通过组合
turbo_stream_from 和broadcast* ,可以实时反映校正系统的结果。
您要改善的地方
-
使用webpacker,即使"表单提交"响应为200,
turbo_frame_tag 中的"提交"按钮仍被禁用。-
因此,使用
--skip-javascript 初始化了rails项目。 -
我找不到,但似乎与
rails/ujs 不一致。
-
因此,使用
-
这很不方便,因为没有Webpacker,
rails/ujs 消失了,并且无法使用form_with ... remote: true 系统。 -
即使没有
ujs ,文档中也会显示You can still use the data-confirm and data-disable-with. ,但是脚手架生成的删除链接无效。
摘要
-
感觉像
turbo を使えば、js を書かなくて済むよ ,但是您需要习惯turbo ならでは 方法。 -
由于它不能与
ujs 或webpacker 一起使用,因此最好稍等一会儿再介绍现有项目。
参考链接
- 与Hotwire进行实时聊天
- https://turbo.hotwire.dev/handbook/introduction