https://online.pragmaticstudio.com/courses/hotwire/ ## Turbo Drive 就是之前的 turbolink ## Turbo Frame (完全只需要改 HTML erb 即可,後端不用改) turbo_frame_tag 還會把包起來的整塊都變成 turbo frame 連結,有副作用。還不如只用 div 就好了 回傳的 template 裡面也必須要有 turbo_frame_tag,不然會替換成 空白 就是簡化版的只能更新一個區塊的 Turbo Stream,可以沿用本來的 HTML template/format 相比 Turbo Drive 就是匡一個比較小的範圍內是 turbolinks 的感覺 有個 form data: { turbo_frame: “XXX” } 功能 蠻厲害的,讓 form submit 之後只更新某個區塊。不用寫 js 用 data { turbo_action: “advance” } 可以順便改 URL 記錄 Form invalidation 情境也可用,還不錯 autoscroll 功能 [Turbo Reference](https://turbo.hotwired.dev/reference/frames) lazy-loading 功能 turbo_frame_tag :src , :loading => :lazy > 感覺都可以透過 :remote => true 搭配 controller 裡面的 render :js => XXXX 某的 helper 來解決 ## Turbo Stream (一種 server-side rendering format) 有七種 action 其實用 js 也行 template 變成 HTML 為主的 erb 相比 js.erb 的可讀性是有比較好,但是也失去擴充 js 的空間 自己寫 helper 和 controller 方法就可以取代 Turbo Stream 了 > 自己寫不就是 RJS 嗎? 哈哈 例如 turbo_stream.replace “DOM_ID”, (partial 參數) 支援 block turbo_stream.replace “DOM_ID” do render :partial => “XXX end 支援 inline render turbo_stream: turbo_stream.replace(@bait, @bait) Append Prepend Remove Update Before After [The Pragmatic Studio | Sign In](https://online.pragmaticstudio.com/courses/hotwire/steps/14) ## Stimulus 方便在現有的 erb template 上,綁 javascript 事件 > vue.js 其實也可以辦到對 sever-side template 綁事件吧,只是現在比較流行的做法是 component 單件 > 本質上還是完全對應 DOM 操作,跟 vue.js 那種用資料回推表現層不同 > 一套操作下來,還是很零碎,跟之前 jd.erb 的缺點一樣 ## ActionCable 用 turbo_stream_from 方法訂閱 broadcast_prepend_to 方法發布和調整 HTML broadcast_replace_to 方法 broadcat_prepend_later_to 也有 async 版本的方法 # 結論 看完感覺是.... 就這? 還是蠻失望的,跟15年前的概念一樣,沒啥進步 XD 除了 Turbo Frame 是蠻漂亮的語法糖 Turbo Stream 就是 RJS Stimulus 是半套的現代 js framework 就專案是不會用了 新專案..... 再看看 XD #tech