[英]Rails 3 passing a rails array to javascript function which uses a javascript array
我正在嘗試將一個 rails 數組傳遞給一個 javascript 函數。 然后該函數將使用 javascript 中的數組值,因此我需要將其保留為數組。
這是我傳遞數組的方式:
"graphit([<%=@mpg_values.join(",") %>])"
這會在 HTML 中產生這個
"graphit([#<Mile:0x6ff0cf0>,#<Mile:0x6ff0c18>,#<Mile:0x6ff0b58>])"
哪些不是值,它們應該是十進制數。 我認為這是因為它是對數組的引用,所以我為什么會得到混亂的值。 如果我執行類似 to_s 的操作,我會看到這些值,但其中還有其他內容,例如表和文件名。
有人知道如何將這個 rails 數組作為數組傳遞給 javascript 函數嗎?
在此先感謝您的幫助。
因為這似乎仍然是一個問題,沒有人解決它。 開始
var js_array = [<%= raw @object.to_json %>];
collect
方法。您的解決方案 Xaxum 的更簡潔版本將是這樣的:
def chart_values
@mpg_values.collect do |mpg_value|
[ mpg_value.date.to_s, mpg_value.mpg.round(2).to_f ]
end
end
collect
方法會自動生成一個包含塊結果的數組,因此您最終會得到如下結果:
[
[2011-05-20, 18.56],
[2011-06-01, 18.47]
]
我還將mpg
值更改為使用to_f
,它提供數字而不是字符串。
按照這篇文章中的幾次建議使用 JSON 總是給我這樣的東西。
[{"mile":{"date":"2011-05-20","mpg":"18.565887006952"}},{"mile":{"date":"2011-06-01","mpg" :"18.471164309032"}}]
我真正想要的只是這個...... [[2011-05-20, 18.56][2011-06-01, 18.47]]
所以我用這樣的幫手處理了它。
def chart_values()
@chart_values = '['
@mpg_values.each do |m|
@chart_values = @chart_values+'['+m.date.to_s+', '+m.mpg.round(2).to_s+'],'
end
@chart_values = @chart_values+']'
end
然后將 chart_values() 傳遞給 javascript。
可能不是最好的解決方案,但它以我需要的格式為我提供了所需的值。
如果您使用的是 HAML,您可以這樣做:
var js_array = #{object};
bokor的答案有效,但如果您希望將數組保存到const
而不是var
/ let
,則會導致一些 linter 和 IDE 錯誤。
以下變體似乎可以工作並且符合我正在使用的 linter 和 IDE。
const js_array = JSON.parse('<%= raw @object %>');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.