【问题标题】:Rails URL helpers from Stimulus controller?来自刺激控制器的 Rails URL 助手?
【发布时间】:2020-11-11 17:05:22
【问题描述】:

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

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

【问题讨论】:

  • 为什么不在视图中将路由作为数据属性传递,然后从那里在 JS 中获取它们?

标签: ruby-on-rails stimulusjs


【解决方案1】:

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

# 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(?) 或您已经拥有的任何其他目标。

【讨论】:

    猜你喜欢
    • 2023-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 2011-05-26
    • 2022-11-18
    • 2022-06-26
    • 2022-06-29
    • 2016-07-23
    相关资源
    最近更新 更多