来自刺激控制器的Rails URL帮助程序



一个简单的问题,从刺激控制器内部访问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;
  }
}

我一点也不喜欢这样,但不知道该怎么做。

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

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

app/javascript/controllers/sstage_filter_controller.js.erb

import { Controller } from 'stimulus'
export default class StageFilterController extends Controller {
  static targets = ['link']
  getPlotsUrl(siteId) {
    var url = this.linkTarget.dataset["url"]
    url += `?site=${siteId}`
    return url;
  }
}

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

最新更新