Обновление различных div из AJAX в зависимости от ошибок валидации - PullRequest
1 голос
/ 19 ноября 2008

У меня есть форма, которую я отправляю через AJAX (используя прототип и встроенный помощник rails 'form_remote_tag').
Я хотел бы обновить один div (область состояния), если есть ошибки проверки формы, но другой div (div, в котором находится форма), если отправка прошла успешно.

Мой код выглядит примерно так:

<div id="recipe-status"><!-- I want form validation errors to go here --></div>
<div id="recipe">
    <%= form_remote_tag(:update => "recipe-status",
       :before => "Element.show('wait-indicator')",
       :success => "Element.hide('wait-indicator')",
       :complete => visual_effect(:appear, "recipe-status"),
       :url => { :action => 'import', :id => @recipe.id },
        :failure => "alert('Unable to import recipes at present')") %>
    <-- Form goes here, I want this to be replaced if the submit succeeds -->
</div>

Единственный способ, которым я могу думать об этом, - вернуть статус ошибки HTTP, если есть ошибка проверки, но это похоже на хак. Есть ли более чистый способ сделать это вообще?

Ответы [ 2 ]

1 голос
/ 20 ноября 2008

Я бы рекомендовал, как отмечено в другом ответе, посмотреть на использование jQuery. Однако это наверняка потребует некоторого ускорения, поэтому придерживайтесь Rails по умолчанию, чтобы вы могли двигаться вперед быстрее ...

То, что вы хотите посмотреть, это встроенный RJS. Вместо того, чтобы делать все в вызове form_remote_tag, вы можете делать обновления AJAX из своего контроллера. Таким образом, вы можете управлять логикой наличия ошибок валидации и выполнять то или иное обновление AJAX (в зависимости от того, какой div) в зависимости от этого.

См. этот пост Jamis Buck для начала.

1 голос
/ 19 ноября 2008

Я бы посмотрел последние Railscasts на jQuery , а также более старый эпизод на шаблонах RJS . Это должно заставить вас хорошо работать с AJAX и вашим Rails-приложением и заставить все работать правильно и без каких-либо проблем.

Посмотрев на ваш код, я бы предложил использовать jQuery (см. Эпизод выше), вы извлечете весь javascript из вашей формы , сделав его намного менее навязчивым (что очень хорошо вещь).

Кажется, вы освоили методы, поэтому вы быстро освоите написание ненавязчивого Javascript с помощью jQuery, и, скорее всего, вы станете гораздо более счастливым человеком с гораздо более чистым приложением. :)

Удачи!

...