ruby-on-rails 为什么fetch()不触发turbo帧替换?

dy2hfwbg  于 2023-03-24  发布在  Ruby
关注(0)|答案(1)|浏览(168)

我有一个涡轮帧如下:

<turbo-frame id="details">
    Select a movie for more details...
</turbo-frame>

当点击下面的a标记时,这个帧会被正确替换,因为route /movie/show/1返回一个id为“details”的turbo帧

<turbo-frame class="movie-cards" id="index">
    <a class="movie-card" data-turbo-frame="details" href="/movie/show/1">
        <div class="movie-item-detail text-center">
          LOTR
        </div>
    </a>
</turbo-frame>

然而,在控制台运行fetch("/movie/show/1")返回了相同的turbo帧响应,但没有替换任何内容。为什么会这样呢?是否有一种方法可以使javascript发起的请求更新turbo帧?

qcuzuvrc

qcuzuvrc1#

有几种方法可以做到这一点。您可以更新turbo帧本身的src属性,绕过fetch的需要。每当此属性更改时,turbo将执行对URL的get请求并替换响应中提供的给定turbo帧:

<turbo-frame id="index" src="/movie/show/1">

或者,如果您使用的是turbo流,您可以使用响应来启动turbo以正确更新页面(参考):

fetch(url, { headers: { Accept: "text/vnd.turbo-stream.html" } })
  .then(r => r.text())
  .then(html => Turbo.renderStreamMessage(html))

相关问题