来自Stimulus控制器的Rails URL辅助方法?

3

简单的问题,如何在stimulus控制器内正确地访问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;
  }
}

我非常不喜欢这个,但不知道还有其他的做法。


1
为什么不直接将路由作为数据属性传递到视图中,然后从那里获取它们的JS呢? - Jon
1个回答

6
您可以在视图中使用 path_helper 函数,并将数据集对象设置为该值,然后在 Stimulus 控制器中访问它。
<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.dataset["url"]
    url += `?site=${siteId}`
    return url;
  }
}

您实际上不需要另一个DOM对象(即span)。您也可以使用包含控制器的div元素,或者已有的任何其他目标。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接