簡體   English   中英

Rails 3 將 rails 數組傳遞給使用 javascript 數組的 javascript 函數

[英]Rails 3 passing a rails array to javascript function which uses a javascript array

我正在嘗試將一個 rails 數組傳遞給一個 javascript 函數。 然后該函數將使用 javascript 中的數組值,因此我需要將其保留為數組。

這是我傳遞數組的方式:

"graphit([<%=@mpg_values.join(",") %>])"

這會在 HTML 中產生這個

"graphit([#&lt;Mile:0x6ff0cf0&gt;,#&lt;Mile:0x6ff0c18&gt;,#&lt;Mile:0x6ff0b58&gt;])"

哪些不是值,它們應該是十進制數。 我認為這是因為它是對數組的引用,所以我為什么會得到混亂的值。 如果我執行類似 to_s 的操作,我會看到這些值,但其中還有其他內容,例如表和文件名。

有人知道如何將這個 rails 數組作為數組傳遞給 javascript 函數嗎?

在此先感謝您的幫助。

因為這似乎仍然是一個問題,沒有人解決它。 開始

var js_array = [<%= raw @object.to_json %>];

使用 Ruby 的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.

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