我正在重构turbo
和stimulus
的Rails控制器,并试图理解如何在Turbo中执行应用程序目前使用JS响应模板所做的事情.
在things#show
页上,我有一个按钮可以请求thing
文本记录的"以前版本".
目前,在rails UJS中,该按钮向things/versions_controller#show
操作发送GET JS请求.该操作通过为@versions
设置IVAR(包含从数据库中提取的版本文本)进行响应,并呈现一行js模板:
# things/versions/show.js.erb
alert('<%= @versions %>');
有了Turbo,我明白了,模板必须简单地呈现turbo_stream标签和更新/追加/替换页面元素.alert 不在该范围内.
有没有办法把ruby ivar @versions
直接传给刺激控制器,这样就可以显示jsalert ?我能想象到的唯一方式是,刺激控制器将处理点击,向things/versions_controller#show
操作发出一个FETCH请求(它将给出一个HTML响应),并处理该响应本身.没有涡轮增压.
我想我可以让Turbo Response在页面中打印一个包含@versions
的隐藏turbo_frame
,并将该框架附加到刺激控制器,该控制器将在框架连接到DOM时立即在alert 中抛出文本.(?)但这似乎过于做作了.
我真的主要是想了解范例,找到做这类事情的最惯用的方式,如果有的话.此外,我意识到alert 是粗糙的,我可以使用模式呈现来实现这一点.