Как я могу повторно сделать javascript onchange текстового поля? - PullRequest
2 голосов
/ 16 июня 2011

Я не ученый, а инженер-механик по профессии. Поэтому я заранее прошу прощения, если я не использую правильные слова для описания вещей. Я буду стараться изо всех сил, чтобы быть ясным.

Я работаю на сайте Rails, который отображает выходную мощность солнечного инвертора клиента. На странице, где отображается выходная мощность (с помощью javascript), я хотел бы, чтобы javascript (со встроенным ruby) был перерисован при замене текстового поля (в котором есть дата). Как и в случае, когда клиент хочет просмотреть свои данные выходной мощности для другой даты, JavaScript для этой страницы будет перерисован соответственно.

Первоначально я пытался использовать render :update и page.replace_html в действии контроллера, которое будет называться заменой текстового поля, но после дальнейших исследований выяснилось, что это не считается хорошей практикой? Кроме того, и что еще более важно, я не мог заставить это работать (мне так стыдно. Большое спасибо тем ответчикам, которые пытались помочь мне!).

Я смотрел Railscast # 136 и пытаюсь адаптировать эту информацию к тому, что мне нужно.

Страница poweroutput.html.erb. Весь мой javascript находится внутри тегов скрипта в основном html-файле. HTML для элемента текстового поля на poweroutput.html.erb выглядит следующим образом (не работает):

<%= text_field_tag(
      'dt', nil,
      {  :id => 'date-field',
         :class => 'dateformat-d-dt-m-dt-Y',
         :onchange => remote_function(
             :url => {:controller => 'pages', :action => 'poweroutput'})
      })
%>

Так что я подумал, что вышеизложенное в основном просто обновит / повторно отобразит страницу при замене текстового поля, но ничего не происходит.

Пожалуйста, помогите, когда я рву свои волосы. Я думаю, что частью моей проблемы должно быть то, что я не понимаю, что делает основная функция Ajax, которая вызывается методом remote_function. Если вы можете пролить некоторый свет на это ИЛИ предложить совершенно другой метод повторного рендеринга замены текстового поля в javascript, я был бы очень благодарен!

Ответы [ 2 ]

0 голосов
/ 16 июня 2011

Сначала я бы использовал firebug или аналогичный, чтобы проверить, отправлялся ли запрос при изменении текстового поля. Далее я бы проверил, каков ответ. Если это ошибка 500, проверьте журналы приложений на наличие трассировки стека.

Я предполагаю, что ответом будет ошибка 500, вероятно, потому что ваша функция update_poweroutput пытается отобразить частичную часть, которой не существует, я думаю, вам нужно указать

:partial => 'javascripts/poweroutputscript.html.erb'

, если, конечно, вы не рендерите другой фрагмент, который существует в папке просмотра страниц. В этом случае вы устанавливаете все необходимые переменные в контроллере?

0 голосов
/ 16 июня 2011

Две вещи, которые, на мой взгляд, могут быть неправильными:

1) Оберните вашу часть с помощью div, так как AJAX вызывает результаты в div:

<script type="text/javascript">
   <div id="poweroutputscript_partial">
     <%= render 'javascripts/poweroutputscript.html.erb' %>
   </div>
</script>

2) В вашем действии,укажите полный путь к частичному:

page.replace_html "poweroutputscript_partial", :partial => 'javascripts/poweroutputscript'
...