Я использую UJS для заполнения формы в модальном режиме, и я использую JQuery Validate для выполнения проверки и отправки формы через ajax обратно на сервер.
Все работает отлично, форма получает визуализируется, поля проверяются, и форма отправляется на сервер правильно. Проблема в том, что обратные вызовы, зависающие от функции $.rails.handleRemote
, не срабатывают.
Вот CoffeeScript, который я использую для проверки и представления (эта функция вызывается с помощью new.js.erb и edit.js.erb:
@initializeForm: ->
$(".note-form").validate ->
rules:
"note[title]" : "required"
submitHandler: (form) ->
$.rails.handleRemote($(form))
.done ->
alert "You will never see me!"
new.js.erb
$('#modal-window').html('<%= escape_javascript(render :partial => 'form', :object => @note) %>');
Note.initializeForm();
create.js.erb
var note = new Note();
note.createOrUpdate("note<%= @note.id %>", "<%= @note.title %>", "<%= escape_javascript(render @note) %>");
Мне удалось взломать его, добавив это в скрипт приложения:
$(document).on 'ajax:success', '.note-form', ->
alert "Here I am!"
Я подтвердил, что у меня есть только одна копия загруженного JQuery.
Любые идеи были бы замечательными!
Изменить Вот скомпилированный JS, который отправляется в браузер:
Note.initializeForm = function() {
return $(".note-form").validate(function() {
return {
rules: {
"note[title]": "required"
},
submitHandler: function(form) {
return $.rails.handleRemote($(form)).always(function() {
return alert("You will never see me!");
});
}
};
});
};
Проблема заключалась в синтаксисе запроса проверки. Я передавал функцию вместо объекта.
Правильный способ вызвать validate
из CoffeeScript:
@initializeForm: ->
$(".note-form").validate
rules:
"note[title]" : "required"
submitHandler: (form) ->
$.rails.handleRemote($(form))
.done ->
alert "You will never see me!"