0

Rails と UJS を使用しています。いくつかのイベントをバインドして、送信前に ajax リンクを無効にし、エラーが発生した場合に再び有効にしたいと考えています。プロセスを処理するために、次の jQuery を作成しました。

$('.post').on('click', 'a[data-toggle="follow"]', function() {
  var elem, href;
  elem = $(this);
  href = elem.attr('href');
  return elem.bind('ajax:loading', elem.attr('href', '#')).bind('ajax:error', elem.attr('href', href));
});

コントローラーで意図的に例外をシミュレートすると、次の JS エラーが発生します。

Uncaught TypeError: Object [object Object] has no method 'apply'

なぜこれが起こっているのですか?Ajax 自体は正常に動作します。これが発生するのは、サーバー エラーが発生した場合のみです。

li.subscription
  - if signed_in? && current_user.subscribed?(post)
    = link_to "Unfollow", [post, current_user.subscriptions.find_by_post_id(post)], method: :delete, remote: true, 'data-toggle' => 'follow'
  - else
    = link_to "Follow", post_subscriptions_path(post), method: :post, remote: true, 'data-toggle' => 'follow'
4

1 に答える 1

2

jQuery bind 関数は、ハンドラー関数を 2 番目の引数として受け取ります。ただし、ここでは、代わりに jQuery オブジェクト (つまり、 によって返される値elem.attr('href', '#')) を提供しています。

次のようなものが必要です:

return elem.bind('ajax:loading', function() {
    elem.attr('href', '#');
}).bind('ajax:error', function() {
    elem.attr('href', href);
});
于 2012-12-18T16:53:43.610 に答える