You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Stimulus控制器方法报错,已排查常规操作仍未解决

Stimulus控制器点击Action报错的可能原因

已确认作用域、方法名称正确,Stimulus控制器已成功注册,执行yarn install并重启服务器后,点击按钮仍触发控制台报错。相关代码如下:

HTML代码

<div data-controller="logs">
      <a class="button is-info is-outlined ml-2 mb-2" data-action="click->logs#displayGraph" data-logs-target="graph_button">Graph</a>
      <div data-logs-target="graph_visualization" class="is-hidden"><h1>GRAPH GOES HERE..</h1></div>
    </div>

Stimulus控制器代码

import { Controller } from "@hotwired/stimulus"

// Connects to data-controller="logs"
export default class extends Controller {
  static targets = ["graph_visualization", "graph_button" ]

  displayGraph() {
    this.graph_visualizationTarget.classList.toggle("is-hidden")
    this.graph_buttonTarget.classList.toggle("is-focused")
  }
}

可能的报错原因:

  • Target访问命名错误:Stimulus会自动将static targets中的蛇形命名(如graph_visualization)转换为驼峰式命名的访问器,正确写法应为this.graphVisualizationTarget和this.graphButtonTarget,而非保留下划线的graph_visualizationTarget和graph_buttonTarget。这是最可能触发控制台报错(如Cannot read properties of undefined)的原因。
  • 控制器文件命名/路径不符:尽管确认控制器已注册,仍需检查控制器文件是否遵循Stimulus默认约定——文件名应为logs_controller.js,且放置在app/javascript/controllers/目录下(或项目配置的Stimulus控制器加载路径),文件命名错误会导致控制器实际未正确绑定。
  • 类名缺失(非直接报错原因):如果is-focused类未在样式表中定义,虽不会触发JS控制台报错,但会导致按钮样式无变化,可顺带确认该类名是否存在。

内容的提问来源于stack exchange,提问作者Daniel_Enqz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 20:06:21