Передача значения RoR в javascript (JQuery) в представлении - PullRequest
0 голосов
/ 14 августа 2011

Я был озадачен следующим кодом. Может кто-нибудь сказать мне, что я делаю неправильно, что javascript не может получить доступ к значению p? Спасибо!

<% p=progress_for(contest_score) %> # p is non-zero

<script type="text/javascript">
  $(function(){
      $('#contest_progressbar').progressbar({value: <%=p%>}); 
      <!--value p becomes 0 when rendered by jquery-->

      $("#contest_progressbar").css({ 'background': 'LightYellow' });
      $("#contest_progressbar > div").css({ 'background': 'Orange' });
      $('#contest_progressbar span.text').text(<%=p%>+'%')
      <!--value p becomes 0 when rendered by jquery-->

   });
</script>
progress: <%=p%> progress bar should be below: # p is the correct value here

<div id='contest_progressbar' style="margin-left:20px; height: 20px;">
  <span class="text"></span>
</div>

РЕДАКТИРОВАТЬ: вместо этого использовать прямой тег сценария. Та же проблема, хотя РЕДАКТИРОВАТЬ 2: Кажется, сейчас проблема JQuery. См. Html в комментарии к ответу Брайана

Ответы [ 2 ]

0 голосов
/ 14 августа 2011

Проблема исправлена.Это не имеет ничего общего с JQuery.Идентификатор div для индикатора выполнения был закрыт, потому что код является частичным, который вызывается методом представления в цикле.Каждые звонки перезаписывают один и тот же div.Код ниже дает желаемый результат.

<% pbar_id="pbar_#{contest_score.user_id}" %>

<script type="text/javascript">
  $$(function(){
      $$('#'+"<%=pbar_id%>").progressbar({'value':<%=p%>})
      $$('#'+"<%=pbar_id%>").css({ 'background':'LightYellow' });
      $$('#'+"<%=pbar_id%>"+' > div').css({ 'background':'Orange' });
   });
 </script>
progress: <%=p%>%
<div id=<%=pbar_id%> style="margin-left:20px; width:256px; height:20px;">
</div>
0 голосов
/ 14 августа 2011

Возможно ли, что jQuery просто не загружается? Если вы зарегистрируете свой отладчик, он может дать вам подсказку, что-то вроде $ is not defined. Если существует конфликт Prototype / jQuery (весьма вероятно, если вы используете Rails до версии 3.1), он может молча завершиться сбоем.

Может также случиться, что блок кода JS должен появиться после , когда вы загрузили jQuery. Причина, по которой я думаю, заключается в том, что, учитывая предоставленную вами информацию, что-то вроде $('#contest_progressbar span.text').text(5+'%'); должно всегда работать, если у вас правильно загружен jQuery и нет других элементов с ID contest_progressbar.

Пример: http://jsfiddle.net/6JQNe/1/

Также несколько незначительных моментов:

  • Вам нужно <%= javascript_tag do %> (обратите внимание на знак равенства), чтобы убедиться, что он рендерится.
  • "#contest_progressbar > div" не будет ничего совпадать
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...