2010-03-04 6 views
5

В приложении Rails 3 я хочу, чтобы браузер вызывал удаленную функцию всякий раз, когда установлен определенный флажок. В Rails 2 это было легко сделать, пропустивform.submit() пропущен rails.js UJS observer

:onclick => remote_function(...) 

к флажку helper. В Rails 3, remote_ * функции устарели, поэтому я попытался следующий обходной путь:

  • создать форму вокруг флажка, используя form_tag ... :remote => true
  • отправить форму, вызвав $("dummy_form").submit(); из onclick обработчика

В файле rails.js, который поставляется в комплекте с Rails, есть наблюдатель, который слушает события submit. Тем не менее, кажется, что они срабатывают только тогда, когда пользователь нажимает кнопку отправки, но не тогда, когда вызывается form.submit() (пока тестируется только в FF).

Это имеет нежелательный эффект, что подача затем не выполняется в фоновом режиме через AJAX, но обычным способом, поэтому браузер покидает текущий сайт и отображает ответ от контроллера.

Кто-нибудь знает обходное решение? Может быть, совсем другой способ получить такую ​​же функциональность?

ответ

1

Вы можете отправить форму по телефону:

$("dummy_form").request({ 
    onSuccess: function(response) {eval(response)} 
}); 

Это отправить форму с помощью AJAX для URL данного в form_tag и оценивать полученный ответ, поэтому он должен реагировать с JS. Измените реализацию onSuccess, если вы этого не хотите.

Если представление формы обходной путь, как вы говорите, то вместо представления всей формы можно также обрабатывать на щелчок событие на флажке вручную Написать AJAX request:

<%= javascript_tag do %> 
Event.observe(window, 'load', function() { 
    $('CHECK_BOX_ID').observe('click', function(event) { 
    new Ajax.Request('/your/url', { 
     onSuccess: function(response) { 
     // yada yada yada 
     } 
    }) 
    }); 
}); 

 Смежные вопросы

  • Нет связанных вопросов^_^