2008-11-19 3 views
1

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

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

<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, если есть ошибка проверки, но это кажется немного рубить. Есть ли более чистый способ сделать это вообще?

ответ

1

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

Посмотрев на свой код, я бы предложил использовать jQuery (см. Эпизод выше), вы получите весь javascript из вашей формы making it a lot less obtrusive (что очень хорошо).

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

Удачи вам!

+0

Вы предлагаете мою функцию возвращает JSON вместо шаблона? Я рассматривал это как решение, но, казалось, было нерешительно передавать сообщения об ошибках. Или вы просто предлагаете мне обменять с Prototype на JQuery? – 2008-11-19 18:51:00

+0

Я предлагаю заменить jQuery. Не нужно JSON, смотрите JQuery Railscasts, с которым я связан выше, он по сути объясняет все, что вам нужно для вашей задачи. – mwilliams 2008-11-19 18:56:25

1

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

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

См. this post by Jamis Buck для начала.