Возврат объекта JavaScript из Ruby - PullRequest
0 голосов
/ 30 марта 2011

Мы возвращаем следующий код 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» - это объект, и мы не хотим, чтобы он возвращался в виде строки, есть ли способ сделать это?

Ответы [ 3 ]

0 голосов
/ 30 марта 2011

Я не думаю, что это возможно.JSON - это простой хэш, и ruby ​​не может включать объект javascript, и нет способа (afaik) eval частей JSON.

Так что я бы предложил что-то подобное и позволил серверу визуализироватьchart.js.erb вместо JSON, и поместите внутрь партиала, в котором вы пишете полную $.jqplot функцию.

0 голосов
/ 30 марта 2011

Это не дает прямого ответа на ваш вопрос, но дает альтернативу. Смотрите мою заметку ниже, хотя, если вы абсолютно обязаны делать то, что вы хотите

Возможно, вы не хотите, чтобы ваш код ruby ​​знал что-либо о ваших объектах javascript. Скорее вы можете поддерживать какую-то структуру type, так что если вы возвращаете данные типа barChart, вы можете ссылаться на них таким образом. Что-то вроде:

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);
0 голосов
/ 30 марта 2011

Попробуйте сырой метод на ваш взгляд.Он будет отображать данные как есть.

<%= raw @data%>

Upadte:

Рендерится ли вы данные в контроллере следующим образом?

render :json => @data.to_json
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...