我们从ruby代码返回以下JSON:
{
"label":"CPU-7",
"data":[[50,45,38,34]],
"settings":{
"seriesDefaults":{
"renderer":"$.jqplot.BarRenderer"
},
"axes":{
"xaxis":{
"renderer":"$.jqplot.CategoryAxisRenderer",
"ticks":[50,45,38,34]
}
}
}
}
但是,“$ .jqplot.BarRenderer”是一个对象,我们不希望它以字符串形式返回,有没有办法做到这一点?
答案 0 :(得分:0)
在您的视图中尝试raw方法。它将按原样呈现数据。
<%= raw @data%>
UPADTE:
你是否在这样的控制器中渲染数据?
render :json => @data.to_json
答案 1 :(得分:0)
我认为这是不可能的。 JSON是一个简单的哈希,ruby不能包含javascript对象,并且没有办法(afaik)到JSON的eval
部分。
所以我会建议类似的东西,让服务器渲染一个chart.js.erb
而不是JSON,并将内部放在你编写完整$.jqplot
函数的部分内。
答案 2 :(得分:0)
这并不直接回答您的问题,而是提供了另一种选择。如果您绝对必须做您想要的事情,请参阅下面的说明
您可能不希望您的ruby代码知道有关您的javascript对象的任何信息。相反,您可以维护某种type
结构,这样如果您返回的数据类型为barChart
,则可以通过这种方式引用它。类似的东西:
var chartTypes = {
barChart: $.jqplot.BarRenderer
}
然后如果你回来了:
{"settings":{
"seriesDefaults":{
"type": "barChart"
}
}
您可以使用
chartTypes[settings.seriesDefaults.type]
同样,我会避免让你的红宝石知道你的javascript对象或你实际渲染数据的方式。 Ruby应该只提供数据,javascript选择如何处理它。
注意强>
从json字符串中获取实际对象,只需执行
// not recommended!!!
var obj = eval(settings.seriesDefaults.renderer);