form.onSubmit().remotize()

26 views
Skip to first unread message

Avol

unread,
Oct 21, 2011, 4:01:28 AM10/21/11
to RightJS Для Бородатых Хакеров
Форма, у которой сделан remotize(), отправляет результат независимо от
значения, возвращаемого функцией onSubmit, хотя она и выполняется.
Не окзывают влияние ни return false ни event.stop() ни
this.cancelXhr().
Кроме того, события onSubmit оказываются бесполезны, если remotize не
вызывать после всех них, так как они выполняются после отправки, и ни
какого влияния на отправленные данные оказать не могут.

Даже расположив обработчики, повешенные на submit, в правильном
порядке (чтобы обработчик от remotize был последним) мне так и не
удалось прервать отправку ни одним из вышеназванных способов.

Как сделать так, чтобы это работало?

Nikolay Nemshilov

unread,
Oct 21, 2011, 4:26:27 AM10/21/11
to right...@googlegroups.com
Так и должно быть, submit - это дом событие формы, remotize() - это отдельный шорткат для Xhr.

remotize() сам слушает submit, принудительно его останавливает и затем отсылает Xhr с данными формы. поэтому он срабатывает не зависимо от того что происходит в других слушателях событий.

Если вам необходимо по разному обрабатывать форму, то следует повешать свой слушатель событий, например

$('my-form').on('submit', function(event) {
  if (somthing()) {
    event.stop();
    this.send(); // <- sending ajax
  } else {
    // sending the form directly
  }
});


--
Thanks,
Nikolay

Avol

unread,
Oct 21, 2011, 5:00:18 AM10/21/11
to RightJS Для Бородатых Хакеров
А если так сделать, он ведь отправит дважды - разве нет?
То есть, сначала отработает мой submit, а потом submit, повешенный
командой remotize().

Nikolay Nemshilov

unread,
Oct 21, 2011, 6:50:39 AM10/21/11
to right...@googlegroups.com
кусок кода который я показал подразумевает вызов без remotize. когда вы вызовите event.stop(); отправка формы будет прервана и вы можете делать дальше с ней что вам нужно, например вызвать Form#send() или вы можете не вызывать event.stop() и позволить браузеру отправить форму как есть.

По сути Form#remotize() - это такой шорткат

Form.prototype.remotize = function(options) {
  this.on('submit', function(event) {
    event.stop();
    this.send(options);
  })
};

т.о. если у вас какая-то сложная логика для отправки формы, вы можете написать свой remotize like метот, типа того что я привел в прошлом письме, и внутри самостоятельно решить куда и как отправлять форму


--
Thanks,
Nikolay

Avol

unread,
Oct 21, 2011, 11:26:52 AM10/21/11
to RightJS Для Бородатых Хакеров

Спасибо. Да, я догадываюсь, как работает remotize.
Я действительно не подумал просто делать отправку вручную, немного
зациклившись на remotize(), который я добавил до того, как делать
дополнительные обработчики. Действительно, в моём случае remotize()
бесполезен.
Reply all
Reply to author
Forward
0 new messages