Ruby on rails: использование переменной javascript в тегах в Html.erb

#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;