我很困惑為什么在使用以下代碼創建新報價時沒有得到 2 個條目。
我的想法是我會從以下內容中獲得一個條目:
- create 方法回傳 turbo_stream 并渲染 create.turbo_stream
- 我訂閱的 actionCable。
如果我洗掉流,我仍然只得到 1 個條目。如果我洗掉 create.turbo_stream 中的 append 方法,我仍然會得到一個條目(來自電纜)
為什么我在兩者都啟用的情況下不 GET 2?
控制器:
在創建中,我有一個回應型別format.turbo_stream.erb以及 html 回應型別。
create.turbo_stream.erb:
<%= turbo_stream.prepend "quotes", @quote %>
<%= turbo_stream.update Quote.new, "" %>
看法
<%= turbo_stream_from( [current_company, "quotes"] ) %>
報價模型廣播:
broadcasts_to ->(quote) { [quote.company, "quotes"] }, inserts_by: :prepend
uj5u.com熱心網友回復:
你已經跳過了重要的部分,你正在渲染的部分:
# app/views/quotes/_quote.html.erb
<div id="<%= dom_id(quote) %>">
<%= quote.content %>
</div>
這兩個:
turbo_stream.prepend "quotes", @quote
broadcasts_to ->(quote) { [quote.company, "quotes"] }, inserts_by: :prepend
最終渲染一個使用_quote部分作為模板的turbo_stream_action_tag :
<turbo-stream action="prepend" target="quotes">
<template>
<div id="quote_1"> q1 </div>
</template>
</turbo-stream>
在前端,turbo處理該標記并將模板添加到指定的目標#quotes:
<div id="quotes">
<div id="quote_1"> q1 </div>
</div>
Turboprepend和appendaction 會考慮id直接子節點,并替換它們。
如果要獲取重復項,只需將所有內容包裝在標簽中:
# app/views/quotes/_quote.html.erb
<div>
<div id="<%= dom_id(quote) %>">
<%= quote.content %>
</div>
</div>
replace但是,這樣做會因為永遠嵌套而搞砸動作div。
如果模板的第一個元素的 id 已被 dom_id 所針對的容器內的直接子元素使用,則將替換它而不是前置。
https://turbo.hotwired.dev/reference/streams#prepend
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/497369.html
