Javascript Rails 4:在CoffeeScript函数中设置链接目标

Javascript Rails 4:在CoffeeScript函数中设置链接目标,javascript,jquery,ruby-on-rails,ruby-on-rails-4,coffeescript,Javascript,Jquery,Ruby On Rails,Ruby On Rails 4,Coffeescript,我正在构建一个Rails 4应用程序,我对JavaScript和CoffeeScript非常陌生 在posts.coffee中,我有以下功能: jQuery -> console.log("test") $(".new-post").on "click", -> date = $(this).data("date") location.href = "/posts/new?post[date]=#{date}" 此功能的目标是允许用户在名为日历视图的自定义日

我正在构建一个Rails 4应用程序,我对JavaScript和CoffeeScript非常陌生

posts.coffee
中,我有以下功能:

jQuery ->
  console.log("test")
  $(".new-post").on "click", ->
    date = $(this).data("date")
    location.href = "/posts/new?post[date]=#{date}"
此功能的目标是允许用户在名为
日历视图的自定义日历视图中单击
.new post
div
-
/calendars/:id/calendar\u视图
-并将其发送到
/calendars/:id/posts/new
,同时通过URL传递
:date
属性

-----

更新:我的路线是:

resources :calendars do
  resources :posts, shallow: true do
    resources :comments, shallow: true
  end
end
-----

更新2:以下是我在
calendar\u view.html.erb中的内容:

<%= content_tag :div, class: "new-post", data: {date: date} do %>

-----


<>我如何在我的咖啡稿函数中实现URL的<代码> /日历/ ID:代码> PAR?

< P>假设,你有一个<代码> <代码>。现在,您可以利用
data
属性来帮助您构建url

<%= conent_tag :div, class: "new-post", data: {calendar_id: calendar.id, date: date } do %>
   # I assume you have the access to the object `calendar`, so use it.
   # some code.
<% end %>

虽然公认的答案很有效,但我将在下面概述一些补充方法:

这里是最简单的方法,可以在模板中生成一个脚本标记,该标记将在客户端上进行评估

在控制器中:

class SomeController < ApplicationController
  def some_action
    @registry = {
      calendar_id: @calendar.id
    }
  end
end
就像你在雇员再培训局时一样

如果您担心通过javascript保护您的私有路由不被外部世界使用,或者随着越来越多的路由被添加到大型应用程序中,javascript的膨胀量会增加,那么js routes具有配置选项,允许您只公开路由的一个子集


这有一个非常强大的好处-你的routes.rb文件是关于你的路线的唯一真实来源-就像它本来应该的那样。明天,如果您必须更改路由,您不必查找使用字符串插入URL的多个coffeescript文件。

您也可以发布路由吗?当然可以。我刚刚更新了问题。@ThibaudClement你很接近了。使用
数据将您的
id
作为自定义属性保存在
div
中。然后在coffeescript内部获取
id
,并生成url@ThibaudClement您使用JS而不是普通的
anchor
标记来执行此操作有什么原因吗?@Vucko:是的,原因是
calendar\u视图显示日历,我试图实现的是允许用户在日历的单元格中单击,并将其发送到
posts new
视图,这样他们就可以从他们单击的单元格中创建一篇包含已保存帖子日期的帖子。非常感谢Arup Raskshit。我已经用我的
calendar\u view.html.erb
文件的内容更新了这个问题。根据我在你回答中的理解,我应该将
替换为
,然后将
calendar\u id=$(@).data(“calendar\u id”)
添加到
posts.coffee
。“这有意义吗?”ThibaudClement就是这样。我举了一个关于这种方法的例子。这很有效!非常感谢你。我仍然会遇到一些UI问题(例如:我需要在单元格中单击几次才能听到onclick事件,但这是另一个问题)。非常感谢你的帮助。
class SomeController < ApplicationController
  def some_action
    @registry = {
      calendar_id: @calendar.id
    }
  end
end
<script>
REGISTRY = <%= @registry.to_json.html_safe %>
</script>
path = Routes.new_post_path({ calendar_id, date })