一个简单的问题,从刺激控制器内部访问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(?(,或者您已经拥有的任何其他目标。