2

启动 Rails 网址:/analytics?param1=a¶m2=b

如果用户更改日历日期,它会触发一个带有新选定日期(start_date 和 end_date)的 JS 函数。然后我必须将它们与之前的 params1 和 params2 一起传递给控制器​​并重新加载页面。

新网址: /analytics?param1=a¶m2=b&start_date=YYYY&end_date=YYYY

注意:param1 和 param2 可能会丢失并且是可选的。

我想使用 Turbolinks,但我想知道哪种方法最干净。

  $('#reportrange').on('apply.daterangepicker', function(ev, picker) {
        let startDate = picker.startDate.format('YYYY-MM-DD');
        let endDate   = picker.endDate.format('YYYY-MM-DD');
        Turbolinks.visit(....)
    });
4

1 回答 1

2

根据您所需的浏览器支持级别,您可以这样做URLSearchParams

$('#reportrange').on('apply.daterangepicker', function(ev, picker) {
  const startDate = picker.startDate.format('YYYY-MM-DD');
  const endDate   = picker.endDate.format('YYYY-MM-DD');

  const params = new URLSearchParams(window.location.search)
  params.set('start_date', startDate)
  params.set('end_date', endDate)

  Turbolinks.visit(window.location.pathname + '?' + params.toString())
});

如果您不想保持与当前相同的路径(我从您的问题中理解了这一点,所以我假设您确实想留下),那么您需要更改window.location.pathname为目标路径。

有关文档,请参阅https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams

于 2020-06-23T16:30:24.650 回答