我想要这些事件:
- 点击一个特定的按钮
- 发送一些参数到自定义控制器动作
但是我使用的是Rails 7,现在我们有Hotwire/Stimulus Js来制作它。
在老式的方式我们做:
视图:
<%= button_to "action", custom_action_path(todo), method: put, remote: true, data: {param_1: "x" } %>
todo_controller:
def custom_action
# ...
end
app/views/备忘录/custom_action.js.erb
//some js changes in view
我知道有了刺激j,我们可以:
视图:
<%#= button_to "action", nil, remote: true,
data:
{
controller: "charges",
action: "click->charges#update_installment_status",
charges_code_param: charge.code,
charges_action_param: "set as paid"
}
%>
charges_controller.js
import { Controller } from "@hotwired/stimulus"
export default class extends Controller {
update_installment_status(event) {
//do something
}
}
但是我的问题是:我怎么能发送这些命令和传递数据到后端控制器改变数据库记录,只有在那之后,也修改视图使用js ?
谢谢。
你可以使用turbo_stream来更新html,然后js可以附加到刺激控制器目标,如下所示。
<%= button_to "action", custom_action_path(todo, param_1: "x"), method: put, remote: true %>
custom_action.turbo_stream.erb
<%= turbo_stream.replace("xyx", partial: "blah/blah") %>
如果你想运行一些js代码,你想在js代码执行后运行,你可以添加到下面的方法
charges_controller.js
static targets = ["xyx"]
xyxTargetConnected(target) {
# add the js code you want to run anytime thexyz html container is connected
}