我们从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“是一个对象,我们不希望它以字符串的形式返回,有什么方法可以做到这一点吗?
发布于 2011-03-31 03:20:25
这并没有直接回答您的问题,但提供了另一种选择。如果你一定要做你想做的事,请看我下面的说明
你可能不想你的ruby代码知道你的javascript对象的任何信息。相反,您可以维护某种type结构,这样,如果您返回的数据是barChart类型,您就可以用这种方式引用它。像这样的SOmething:
var chartTypes = {
barChart: $.jqplot.BarRenderer
}如果你回来了:
{"settings":{
"seriesDefaults":{
"type": "barChart"
}
}您可以使用
chartTypes[settings.seriesDefaults.type]再说一次,我会避免让你的ruby知道你的javascript对象的任何信息或者你是如何实际渲染数据的。Ruby应该只提供数据,javascript选择如何处理这些数据。
笔记
要从json字符串中获取实际的对象,只需执行以下操作
// not recommended!!!
var obj = eval(settings.seriesDefaults.renderer);发布于 2011-03-30 14:22:12
在您的视图中尝试raw方法。它将按原样呈现数据。
<%= raw @data%>更新:
你是这样在控制器中呈现数据的吗?
render :json => @data.to_json发布于 2011-03-31 03:10:38
我认为这是不可能的。JSON是一个简单的哈希,并且ruby不能包含javascript对象,也没有办法(afaik)来eval部分JSON。
因此,我建议使用类似的方法,让服务器呈现一个chart.js.erb而不是JSON,并将其放入您编写完整$.jqplot函数的部分中。
https://stackoverflow.com/questions/5482533
复制相似问题