0

我正在使用带有 UJS 的 Rails。我想在提交之前绑定一些事件以禁用 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绑定函数将处理函数作为第二个参数。然而,在这里您提供的是一个 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 回答