0

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 のコピーが 1 つだけ読み込まれていることを確認しました。

どんなアイデアも素晴らしいでしょう!

編集 ブラウザに送信されるコンパイル済みの 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!");
                });
            }
         };
    });
}; 
4

1 に答える 1