Как не допустить интерполяции строк с числовым содержимым в виде числовых выражений для JavaScript в ERb - PullRequest
0 голосов
/ 05 мая 2011

Я передаю массив из моего приложения Rails в Javascript через шаблон js.erb.То, что меня убивает, - это попытка не допустить интерполяции числовых строк в виде числовых выражений.У меня есть набор дат, коррелированных с числами, то есть:

[["2010-12-01", 19], ["2010-12-02", 12], ["2010-12-03", 15], ["2010-12-04", 0], ["2010-12-05", 0], ["2010-12-06", 13], ["2010-12-07", 18]]

Итак, чтобы получить это в массив JS, я делаю это:

var accData = new Array;
<%- @accepted.each do |ary| %>
  accData.push([Date.parse(<%= ary[0] %>), parseInt(<%= ary[1].count %>) ]);
<%- end %>

Но когда я проверяю значениеary[0] в консоли JS я получаю 1997, т. Е. 2010 - 12 - 01.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 05 мая 2011

Одним из решений этой проблемы является использование метода inspect для получения строки в правильном кавычке, которую можно использовать в самом JavaScript:

var accData = new Array;
<%- @accepted.each do |ary| %>
  accData.push([Date.parse(<%= ary[0].inspect %>), <%= ary[1].count.inspect %> ]);
<%- end %>

Вы также можете использовать метод to_json, который часто возвращает что-то очень дружественное к JavaScript и обрабатывает, среди прочего, преобразование nil в null.

1 голос
/ 05 мая 2011

Поместите свой оператор <%= ary[0] %> в пару кавычек, поскольку <%= не окружает 2010-12-01 в них. Вам также на самом деле не нужен parseInt (если только вы не заключаете в кавычки вызов ary[1].count):

var accData = new Array;
<%- @accepted.each do |ary| %>
  accData.push([Date.parse("<%= ary[0] %>"), <%= ary[1].count %> ]);
<%- end %>
...