replace_html в Ruby on Rails генерирует TypeError - PullRequest
0 голосов
/ 23 июня 2011

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

У меня есть следующий код в моем представлении (фактически в частичном) для поля выбора:

<%= f.collection_select :xyz_id, @xyzs, :id, :display_name,
                        { :prompt => "Select a XYZ..." },
                        { :onchange => "#{remote_function(:url => {:action => "update_text_field"}, 
                                                          :with => "'abc_id='+$('#foo_abc_id').val()")}",
                          :class  => "blah" } %>

Метод update_text_field в контроллере выполняет свою работу и вызывает replace_html примерно так:

some_info = foo.bar.first(:order => "id DESC").name

render :update do |page|
  page.replace_html 'myDivId', :partial => "shared/my_partial", :locals => { :some_info => some_info }
end

Наконец, my_partial выглядит такthis:

<%= text_field_tag :special_info, some_info, :size => 20, :readonly => "readonly" %>

Часть, содержащая эту часть, имеет следующее:

<div id="myDivId"><%= render :partial => 'shared/my_partial', 
           :locals => { :some_info => some_info } %></div>

При запуске все работает хорошо, пока replace_html не выдаст ошибку RJS:

Ошибка RJS:

TypeError: Результат выражения 'element.getElementsByTagName' [undefined] не является функцией

С последующим:

Element.update("myDivId",
"<input id=\"special_info\"
name=\"special_info\"
readonly=\"readonly\" size=\"20\"
type=\"text\" value=\"The right text\"
/>");

Есть идеи по поводу этой ошибки?

1 Ответ

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

У меня это работает сейчас.

Уроки:

  1. Использовать рендер: частичный вместо рендера: обновление в контроллере
  2. Использование ненавязчивого JS для выдачиполучить запрос к контроллеру
  3. Использование: remote => true в форме
  4. Не ищите решения или не экспериментируйте ночью, когда вы работали в течение последних 12+ часов

Вышеприведенный список определенно кажется "достаточным", но я не уверен, что все в нем "необходимо", но я собираюсь перейти к использованию приведенного выше списка для всех остальныхдинамические поля ввода в моей форме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...