我是Stimulus JS的新手。我有点拘泥于在表单中使用collection_select
(使用rails g scaffold创建(来创建一个简单的事件fire。
这是我的dropdown-controller.js
(刺激(文件:
import { Controller } from "stimulus"
export default class extends Controller {
static targets = ["target"];
handleChange() {
console.log('works!')
}
}
这是我的_forms.html.erb
文件:
<%= form_with(model: stock_order, local: true) do |form| %>
...
<section data-controller="dropdown">
<div class="field">
<%= form.label :company_id %>
<%= form.collection_select :company_id, Company.all, :id, :name, data: {action: "change->dropdown#handleChange"} %>
</div>
</section>
<div class="actions">
<%= form.submit %>
</div>
<% end %>
我试过很多东西:
<%= form.collection_select :company_id, Company.all, :id, :name, data: {action: "change->dropdown#handleChange"} %>
<%= form.collection_select :company_id, Company.all, :id, :name, {data: {action: "change->dropdown#handleChange"}} %>
<%= form.collection_select :company_id, Company.all, :id, :name, data: {action: "dropdown#handleChange"} %>
…etc
如果我使用html选择标记而不是rails的collection_select
,我只能启动console.log('works!)
。如果我创建一个测试按钮或使用form.check_box
,则会触发事件。
有什么想法吗?很抱歉,如果这是个愚蠢的问题,我没有主意。
谢谢!
data-
是html属性,因此在form.collection_select
调用时会漏掉一个参数
<%= form.collection_select :company_id, Company.all, :id, :name, nil, data: {action: "change->dropdown#handleChange"} %>
参见方法描述