Rails Rails7 中 Stimulus 的 .js 文件中 如何通过判断数据是否被成功执行 来控制其是否触发 JS 操作

MrTentacle · 2022年06月25日 · 最后由 suupic 回复于 2022年07月01日 · 240 次阅读

最近在学习 Rails7 但是遇到了个问题不知道该如何继续 跪求大佬指点迷津 OTZ

在 Rails7 中 Turbo Stream 负责局部刷新页面 Stimulus 用来同步做其他 JS 操作 但是有个情况我不知道该如何处理 比如 像之前我们用 rails-ujs 的时候 用的是 .js.erb 文件 可以支持 ruby 代码 和 js

但是现在 局部刷新的文件是 .turbo_stream.erb 这个文件是可以直接拿到后台控制器中的实例变量进行操作的

但是 stimulus 的文件是 .js 无法对 rails 的 controller 中 实例变量 做类似 .valid? 这种操作

由于这两种方式是完全独立的 所以我不知道该如何在数据更新遇到失败时 不刷新页面的同时 (这个可以做到) 再阻止其他 JS 的操作 (臣妾做不到啊)

我用各种关键字搜索了好几天 都没有我想要的答案 一直在纠结这种问题 因为我们之前的项目用的是 Rails6 遇到过类似的操作 当时用的 rails-ujs 的 remote: true 再加个 .js.erb 文件 ruby 代码和 js 写在一起 很容易解决 您知道该如何解决吗?

stimulus 主要是前端的东西,跟你的 ujs 关系不是很大,remote : true 的东西应该要换成 turbo_stream 来做 turbo_stream 的功能够满足你的需求的,而 turbo_stream 也可以结合 stimulus

复杂情况交给前端处理,不用 turbo stream。

换个思路, 你的处理结果可以输出成 stimilus 的 value 项

需要 登录 后方可回复, 如果你还没有账号请 注册新账号