簡體   English   中英

Rails 4:將變量傳遞給javascript

[英]Rails 4: Passing variables to javascript

我已經嘗試了很多方法並且遵循了Ryan Bates的指南,但無論我做什么,我仍然未定義。

application.html.erb

<body>
 <%= content_tag :div, id: 'trackers', data: {trackers: User.count} do %>
 <% end %>
</body

application.js.erb

var datadump = ($('#trackers').data('trackers'))
console.log(datadump)
//returns undefined in console

查看頁面源我可以看到變量

<div data-trackers="2" id="trackers">

我現在正在傳遞User.count只是為了保持簡單,但我需要傳遞@trackers_count,它在應用程序控制器的before_action中實例化。 一旦我在這里找出問題,我應該能夠解決這個問題。 有什么建議?

更新 - 我已將所有變量簡化為僅跟蹤器,而不是trackers_count,以防止語法和更新代碼中的任何錯誤反映出來。

答案更新 - 我選擇了正確的答案,因為如果你想傳遞任何變量ASIDE FROM CURRENT_USER那些方法是完美的。 但是,您無法使用JS中的current_user訪問任何內容,因為它在窗口之前加載,因此無法知道current_user是誰。 這是一個真正的痛苦,但我只是做了很長的路,並通過傳入json和ajax請求訪問我需要的信息。

我曾經做過:

var my_var = <%= User.count %>
console.log(my_var)

如果它是一個整數,這可以正常工作。 但是,如果要傳遞對象,請使用:

var my_var = JSON.parse(('<%= (@Users.count) == 0 ? "[]" : Users.first(10).to_json %>')

console.log(JSON.stringify(my_var))

你忘了准備文件了。 嘗試:

$(function(){ 
  var datadump = ($('#trackers').data('trackers'));
  console.log(datadump)
});

或者從Rails到JS提供數據使用Gon gem https://github.com/gazay/gon

從谷歌這里跌跌撞撞。 在我的例子中,我試圖將一個對象數組傳遞給js.erb,這會觸發前端組件偵聽的事件。 對於谷歌的任何人,我通過執行以下操作解決了這個問題:

在我的controller.rb中:

@payload = []

array.each do |a|
  temp = {
    foo: a.id,
    bar: a.relation.relation
  }
  @payload << temp
end

在我的js.erb中:

$(document).trigger('event', { data: <%= @payload.to_json.html_safe %> })

在我的component.js中:

$(document).on('event', (e, data) => {
  console.log(data) //should be array of objects in proper format
})

希望這有助於某人!

可以幫到你。

對我來說,我想轉動這個陣列

  @dates = ["2018-12-24", "2018-12-25", "2018-12-26", "2018-12-27", "2018-12-28"]

在Javascript中變成一個變量。 我嘗試了基本的:

var dates = <%= @dates.join(", ") %>
alert(my_var)

這提醒了這個確切的文字:

1995

我不知道為什么。

由於它沒有工作,我通過復制和粘貼嘗試了Guru的解決方案,但現在我的代碼中出現了錯誤。 最后,我得到了Guru的解決方案:

(打印嵌入式ruby打開和關閉在JSON.parse()之外工作,並且缺少“)”)

  var dates = <%= JSON.parse(@dates.join(", ").to_json)%>
  alert(dates)

但即使它沒有崩潰,想要猜測它的警報?

是的,你猜對了:

1995

所以我放棄了,我使用了一個解決方法:

在我看來edit.html.erb

<div class="dates"><%= @dates.join(", ") %></div>
<script>
  var dates = $(".dates").text()
  alert(dates)
  $(".datepicker").val(dates)
</script>

這允許我提供變量,因此提醒正確的數據並使用正確的信息設置Datepicker的輸入。 我仍然因為無法解決1995年的問題而受到抨擊。 如果有人能夠如此善意地解釋,我會非常感激。 希望這會有所幫助並度過美好的一天!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM