我有一个应用程序,在我的控制器上有一个元素数组。我想将此数组传递给Javascript视图,然后将其转换为JSON并进行解析。
这是我的观点:
<% content_for :page_meta do %>
<script>
const filterItems = "<%= @filter_options %>";
const productItems = "<%= @mdms_products %>";
</script>
如果我调试@filter_options。我在IRB上有此广告:
@filter_options.class # => Array
值:
[{:name=>"Solution Type", :uid=>"application", :component=>"HierarchicalListFilter", :props=>{:rootUrl=>"/insulation/commercial/enclosure/applications", :rootText=>"Enclosure Solutions"}, :values=>[{:name=>"Walls", :slug=>"walls", :children=>[{:name=>"Framed", :slug=>"framed", :children=>[{:name=>"Steel Stud", :slug=>"steel-stud"}, {:name=>"Wood Stud", :slug=>"wood-stud"}]}, {:name=>"Masonry", :slug=>"masonry", :children=>[{:name=>"Concrete Masonry Unit", :slug=>"concrete-masonry-unit"}]}, {:name=>"Concrete", :slug=>"concrete", :children=>[{:name=>"Precast", :slug=>"precast"}, {:name=>"Tilt-up", :slug=>"tilt-up"}, {:name=>"Cast-in-place", :slug=>"cast-in-place"}]}, {:name=>"Metal Building", :slug=>"metal-building"},
一切看起来都很完美吧?但是,在我的JavaScript控制台调试中,当我获得productItems的值时,我得到了这个奇怪的字符串:
[{:name=>"Solution Type", :uid=>"application", :component=>"HierarchicalListFilter", :props=>{:rootUrl=>"/insulation/commercial/enclosure/applications", :rootText=>"Enclosure Solutions"}, :values=>[{:name=>"Walls", :slug=>"walls", :children=>[{:name=>"Framed", :slug=>"framed", :children=>[{:name=>"Steel Stud", :slug=>"steel-stud"},
当然,当我尝试执行JSON.parse(filterItems)时,会显示一个解析错误。
那么,用Javascript将Ruby数组传递给Json的更好方法是什么?
答案 0 :(得分:1)
Ruby与JavaScript的符号完全不同,因此您必须以正确的形式表示它,并确保它不会被HTML转义:
defmodule Foo.Skeleton do
def hello do
end
def goodbye do
end
end
将整个内容呈现为JSON并通过AJAX加载也可能更容易。