0

私は ajax リクエストを行うフォームを持っています。問題は、フォームをクリックするたびに、そのリクエストの回数が倍増することです。

サブミット・インターセプトを設定した方法が原因だと確信していますが、それを単一のコンポーネントとしてカプセル化しながら、それを行う方法が他にわかりません。

ビュー レイヤーとして反応を使用しており、リクエストをインターセプトするコードを含む関数をアタッチしました。この関数は、afterMountコールバックとafter_updateコールバックの両方で呼び出されます。これを行わないと、フォームの送信が傍受されないか、一度だけ傍受されてから通常の送信が行われます。

これらのイベントが発生し、追加の送信ハンドラーが追加されるため、明らかに増加しています。

私は opal と react.rb を使用しているため、コードが少し奇妙に見えるかもしれません。

フォームの送信アクションをインターセプトする関数は次のとおりです

def set_up_login_form
    puts 'setting up form'
    login_form = Element["#login_form"]
    login_form.on :submit do |event|
        unless login_state == :processing
            event.prevent_default
            username = login_form.find('#username').value
            password = login_form.find('#password').value
            login!
            self.username = username
            self.handle_login_submit({username: username , password: password})
        end 
    end
end

ここに私のコールバックがあります:

after_mount do
    fix_button #untill materialize.js gets fixed
    set_up_login_form
end

after_update do
    set_up_login_form
end

コンポーネントの状態がすでにリクエストの途中であるかどうかを確認することで、リクエストの量を減らすことができましたが、追加される送信ハンドラーの量は減りませんが、かなりの量の処理が停止しますが、追加されるハンドラーの実際の乗算を停止しません。

4

1 に答える 1

0

同僚が言及するまでなぜそれを考えなかったのかわかりませんが、フォームをサブコンポーネントに移動することで、レンダリングされたときにのみ発生するフォームコンポーネントマウントでインターセプトコードを実行できるようになり、問題が解決しました!

于 2015-08-20T09:55:21.720 に答える