#javascript #ruby-on-rails #erb
#javascript #ruby-on-rails #ошибка
Вопрос:
Я пытаюсь вставить переменную Javascript в теги <% = %>, но она печатает имя переменной подробно. Вот мой код
<script>
function getGraph(agency,device_id)
{
var i = document.createElement('img');
i.src = '<%= show_graph_hcfcd_url('device_id') %>';
$(graphDiv).appendChild(i);
}
</script>
Теперь проблема в том, что URL-адрес генерируется просто отлично, за исключением того, что вместо значения device_id в остальном URL-адресе отображается ‘device_id’.
Есть какие-нибудь подсказки, как с этим справиться?
Комментарии:
1. Можете ли вы показать исходный код для show_graph_hcfcd_url?
2. Удалите кавычки. Если это строковая переменная, вы бы не заключали ее в кавычки.
3. @Брайан Дрюери: код show_graph_hcfcd_url в порядке, и он работает. Я протестировал URL отдельно. Проблема в том, чтобы сгенерировать правильный URL.
4. @Fareesh : Если я удалю эти кавычки, он будет считать device_id переменной ruby, что неверно. при заключении в кавычки идентификатор device_id становится подробным в URL. На данный момент я использую функцию replace() в javascript для замены ее переменной.
5. Я имел в виду цитаты, окружающие
<%= %>
Ответ №1:
<%= %>
будет интерпретировать код на сервере
и переменная javascript доступна для изменения на клиенте. Итак, делаем
<%= show_graph_hcfcd_url('device_id') %>
вероятно, это неправильный способ сделать это.
Возможно, вы захотите попробовать поместить URL (ы) в атрибуты данных элемента:
<div id="device_id" data-url="<%= show_graph_hcfcd_url(@device.id) %>">...</div>
<script>
function getGraph(agency,device_id)
{
var i = document.createElement('img');
i.src = $(device_id).data("url");
$(graphDiv).appendChild(i);
}
</script>
также смотрите
http://railscasts.com/episodes/324-passing-data-to-javascript
Для этого есть хороший инструмент под названием «gon»
Ответ №2:
Вот как я решил это на данный момент:
<script>
function getGraph(agency,device_id)
{
var i = document.createElement('img');
var url = '<%= show_graph_hcfcd_url('device_id') %>'; //new change
url = url.replace('device_id',"" (device_id*1000)); //new change
i.src = url;
$(graphDiv).innerHTML = "";
$(graphDiv).appendChild(i);
}
</script>
Выделенные жирным шрифтом строки показывают, что я сделал. По сути, заменил «device_id» в URL на его значение.
Но я все еще надеюсь на более элегантное решение.
Комментарии:
1. Я не думаю, что есть элегантное решение этой проблемы. Моим решением было заменить фактический URL на корневой URL и добавить путь и параметр:
var url = "<%= root_url %>graph_hcfcd/" device_id;