2

简单的问题,从刺激控制器内部访问 URL 助手的正确方法是什么?

现在我们必须做一些相当臭的代码,控制器通过 erb 传递,以允许这样的事情:

// app/javascript/controllers/stage_filter_controller.js.erb

import { Controller } from 'stimulus'

export default class StageFilterController extends Controller {

  // snip...

  getPlotsUrl(siteId) {
    var url = '<%= Rails.application.routes.url_helpers.plot_options_path %>'
    url += `?site=${siteId}`
    return url;
  }
}

我根本不喜欢这个,但不知道该怎么做。

4

1 回答 1

4

您在视图中使用 path_helper 并将数据集对象设置为该值。然后在刺激控制器中访问它。

# view

<span data-url="<%= plot_options_path %>" data-target="stage-filter.link">
</span>


# app/javascript/controllers/stage_filter_controller.js.erb

import { Controller } from 'stimulus'

export default class StageFilterController extends Controller {
  static targets = ['link']

  getPlotsUrl(siteId) {
    var url = this.linkTarget.datatset["url"]
    url += `?site=${siteId}`
    return url;
  }
}

您实际上不需要另一个 DOM 对象(即跨度)。您也可以使用您的控制器所在的 div(?) 或您已经拥有的任何其他目标。

于 2021-01-11T16:13:41.453 回答