Ruby on rails: использование переменной javascript в тегах <% =%> в Html.erb - PullRequest
7 голосов
/ 09 мая 2011

Я пытаюсь использовать вставку переменной 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'.

Какие-нибудь подсказки, как преодолеть это?

Ответы [ 2 ]

9 голосов
/ 25 июля 2012

<%= %> будет интерпретировать код на сервере

, и переменная 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

Есть хороший камень для этого, называемый "гон"

2 голосов
/ 09 мая 2011

Вот как я решил это сейчас:

<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 на его значение.

Но я все еще надеюсь на более элегантное решение.

...