首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >刺激控制器动作触发两次

刺激控制器动作触发两次
EN

Stack Overflow用户
提问于 2020-10-31 09:08:56
回答 2查看 671关注 0票数 2

我是StimulusJS的新手,我只是想在用户添加新帖子时显示附加在其他帖子后面的帖子内容。看起来一切正常,但是帖子被追加了两次,所以看起来表单提交了两次。

代码语言:javascript
复制
  <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>

实际的控制器:

代码语言:javascript
复制
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>`);
  }
}

我知道这是可行的,因为当表单提交时,它会在页面上显示帖子,但是函数会再次调用,并且帖子会出现两次。我用debugger试过了,似乎刺激内部的某些东西第二次调用了addBody()

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

代码语言:javascript
复制
  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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-04 11:12:02

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

代码语言:javascript
复制
const application = Application.start()
const context = require.context("../controllers", true, /\.js$/)
application.load(definitionsFromContext(context))

import "controllers"

我不知道这一行:import "controllers"是如何实现的,也不知道我认为它做了什么,但在删除它之后,东西只触发了一次。

票数 4
EN

Stack Overflow用户

发布于 2020-10-31 22:39:56

因此,我知道在默认情况下,窗体应该侦听submit事件,所以您不需要包括事件名称(请参阅here for event shorthands),但我想知道是否因为它是一个带有remote: true的窗体,所以它也侦听ajax:success事件。如果您尝试将数据操作更改为仅侦听ajax:success事件,是否可以解决问题?

代码语言:javascript
复制
data: { action: "ajax:success->post#addBody" }

附言:我知道这是一种推测性的回答,因此可能需要一个评论而不是一个答案,但我没有名气来发表评论。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64617503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档