Streams
﹟ 八个操作
﹟ 追加
将模板标记中的内容追加到由目标 dom id 指定的容器中。
<turbo-stream action="append" target="dom_id">
<template>
Content to append to container designated with the dom_id.
</template>
</turbo-stream>
如果模板的第一个元素具有一个 id,而该 id 已被 dom_id 指定的目标容器内的直接子元素使用,则会替换该元素,而不是追加该元素。
﹟ 前置
将模板标记中的内容前置到由目标 dom id 指定的容器中。
<turbo-stream action="prepend" target="dom_id">
<template>
Content to prepend to container designated with the dom_id.
</template>
</turbo-stream>
如果模板的第一个元素具有一个 id,而该 id 已被 dom_id 指定的目标容器内的直接子元素使用,则会替换该元素,而不是前置该元素。
﹟ 替换
替换由目标 dom id 指定的元素。
<turbo-stream action="replace" target="dom_id">
<template>
Content to replace the element designated with the dom_id.
</template>
</turbo-stream>
﹟ 更新
将模板标记中的内容更新到由目标 dom id 指定的容器中。
<turbo-stream action="update" target="dom_id">
<template>
Content to update to container designated with the dom_id.
</template>
</turbo-stream>
﹟ 删除
删除由目标 dom id 指定的元素。
<turbo-stream action="remove" target="dom_id">
</turbo-stream>
﹟ 之前
在由目标 dom id 指定的元素之前插入模板标记中的内容。
<turbo-stream action="before" target="dom_id">
<template>
Content to place before the element designated with the dom_id.
</template>
</turbo-stream>
﹟ 之后
在由目标 dom id 指定的元素之后插入模板标记中的内容。
<turbo-stream action="after" target="dom_id">
<template>
Content to place after the element designated with the dom_id.
</template>
</turbo-stream>
﹟ 变形
通过变形替换由目标 dom id 指定的元素。
<turbo-stream action="morph" target="dom_id">
<template>
Content to replace the element.
</template>
</turbo-stream>
可以将 children-only
属性添加到 turbo-stream
元素中,以仅变形由目标 dom id 指定的元素的子元素。
<turbo-stream action="morph" target="dom_id" children-only>
<template>
Content to replace the element.
</template>
</turbo-stream>
﹟ 刷新
启动 页面刷新,以通过变形呈现新内容。
<!-- without `[request-id]` -->
<turbo-stream action="refresh"></turbo-stream>
<!-- debounced with `[request-id]` -->
<turbo-stream action="refresh" request-id="abcd-1234"></turbo-stream>
﹟ 针对多个元素
要使用单个动作定位多个元素,请将 targets
属性与 CSS 查询选择器一起使用,而不是 target
属性。
<turbo-stream action="remove" targets=".elementsWithClass">
</turbo-stream>
<turbo-stream action="after" targets=".elementsWithClass">
<template>
Content to place after the elements designated with the css query.
</template>
</turbo-stream>
﹟ 处理流元素
Turbo 可以连接到任何形式的流,以接收和处理流动作。流源必须分派 MessageEvent 消息,其中包含该事件的 data
属性中的流动作 HTML。然后通过 Turbo.session.connectStreamSource(source)
连接,并通过 Turbo.session.disconnectStreamSource(source)
断开连接。如果你需要处理来自不同源(而不是生成 MessageEvent
的源)的流动作,则可以使用 Turbo.renderStreamMessage(streamActionHTML)
来执行此操作。
将所有这些内容组合在一起的一个好方法是使用自定义元素,就像 turbo-rails 在 TurboCableStreamSourceElement 中所做的那样。