刺激控制器动作发射两次

tfa*_*ina 2 ruby-on-rails stimulusjs

我是 StimulusJS 的新手,我只想在用户添加新帖子时显示附加在其他帖子后面的帖子内容。一切似乎都有效,但帖子被附加了两次,因此看起来表单已提交了两次。

  <div data-controller="posts">
     <div data-target="posts.add">
     </div>
     <!-- this is from a rails partial but it's all inside the data-controller -->
     <%= form_with scope: :post, url: posts_path, method: 'post', data: { action: "post#addBody" } do |form| %>
     <%= form.text_field :content, class: "form-control", data: { target: "posts.body"} %>
     <%= form.submit class: "btn btn-primary" %>
  </div>
Run Code Online (Sandbox Code Playgroud)

实际控制人:

import { Controller } from "stimulus"

export default class extends Controller {
  static targets = ["body", "add"]

  addBody() {
    let content = this.bodyTarget.value;
    this.addTarget.insertAdjacentHTML('beforebegin', `<div>${content}</div>`);
  }
}
Run Code Online (Sandbox Code Playgroud)

我知道这是有效的,因为它在表单提交时在页面上显示帖子,但该函数被再次调用并且帖子出现两次。我已经尝试过这个debugger,似乎刺激内部的某些东西正在addBody()第二次调用?

作为上下文,这就是 posts_controller 正在做的事情:

  def create
    @post = current_user.post.build(post_params)

    respond_to do |format|
      if @post.save
        format.json {head :ok}
      else
        raise ActiveRecord::Rollback
      end
    end

  end
Run Code Online (Sandbox Code Playgroud)

tfa*_*ina 5

原来问题出在我的application.js文件中。我有:

const application = Application.start()
const context = require.context("../controllers", true, /\.js$/)
application.load(definitionsFromContext(context))

import "controllers"
Run Code Online (Sandbox Code Playgroud)

我不知道这条线是如何import "controllers"到达那里的,也不知道我认为它做了什么,但在删除它之后,事情只触发一次。