Как получить объект JS DOM / JQuery для тега формы в обратном вызове form_remote_tag: complete? - PullRequest
2 голосов
/ 21 июля 2011

В Rails 2.3.3 я хочу сделать что-то вроде:

<% form_remote_tag :url => "/some/path/", :loading => "loadingFunction(this)", :complete => "completeFunction(this,request)" do %>

По сути, я хочу иметь возможность передавать этот конкретный тег формы в: complete или: loading функции обратного вызова (вОтносительный способ - я не хочу использовать идентификатор - я хочу иметь возможность получить тег, которому соответствует вызов: complete: естественный результат вызова: complete для тега формы **).

См. Документация по Rails для form_remote_tag .В частности, Rails генерирует код, подобный следующему, для события onsubmit: новый Ajax.Request ('/ some / path /', {asynchronous: true, evalScripts: true, onComplete: function (request) {completeFunction (this, request)}, onLoading: function (request) {loadingFunction (this)}, параметры: Form.serialize (this)});return false; ". Обратите внимание, как вызовы функций заключены в функцию (запрос) {}, которая находится внутри нового Ajax.Request ().

Итак," this "," jQuery (this) "," jQuery(this) .closest ('. someParentElementOfTheForm') "и т. д. не работают.


** Я делаю это потому, что: я рендерил произвольное число" form_remote_tag "с помощью когдастраница загружена, и пользователь может инициировать события, которые вызывают произвольное появление «form_remote_tag» (с похожим содержимым в каждой форме, но количество элементов в каждой форме также произвольно). Если у меня есть один form_remote_tag во всемстраница, есть несколько основных проблем:

  • Пользователь будет редактировать только один раздел страницы (который в моем текущем дизайне соответствует одной форме), но все элементы формы'данные на странице должны быть отправлены в запросе

  • Для отслеживания форм и их элементов потребуется какой-то грязный способ, предоставляя им такие идентификаторы, как:' form-12' , 'форма-12-рaramfield-13 'и т. д.

  • Очень сложно разрешить: пользователю отправлять одну форму, а во время загрузки этой формы через AJAX отправлять другие формы (включая возможностьинициирование события, которое приводит к появлению новой формы, а затем ее отправка) из-за проблем с отслеживанием места размещения данных ответа для каждого запроса

1 Ответ

0 голосов
/ 21 июля 2011

Вы пробовали, передавая обратные вызовы в html-опциях типа

: html => {: loading => "# {remotefunction (options)}; вернуть false;" } или же : html => {: onloading => "# {remotefunction (options)}; вернуть false;" }

Можно указать обратные вызовы (по порядку):

:loading:   Called when the remote document is being loaded with data by the browser.
:loaded:    Called when the browser has finished loading the remote document.
:interactive:   Called when the user can interact with the remote document, even though it has not finished loading.
:success:   Called when the XMLHttpRequest is completed, and the HTTP status code is in the 2XX range.
:failure:   Called when the XMLHttpRequest is completed, and the HTTP status code is not in the 2XX range.
:complete:  Called when the XMLHttpRequest is complete (fires after success/failure if they are present).

Вы можете дополнительно уточнить: успех и: отказ, добавив дополнительные обратные вызовы для определенных кодов состояния.

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

 <% options = {:url => {:action =>"test", :id => 1}, :with =>"Form.serialize('test_form')" }%>
 <% form_remote_tag :html=>{ :onsubmit =>"#{remote_function(options)}; return false" } do %>
...