0

您好,我需要您在以下方面的帮助:

我已经定义了作为链表的主干集合:集合中的每个模型都有对其前身和后继者的引用。

将新模型插入到集合中会触发一个事件,该事件会更新前任模型和后继模型以引用新插入的模型并将这些模型存储到数据库中。

模型的顺序是关键,应用程序必须保持无状态。

问题:当一个紧张的用户快速按下添加按钮时,我发现数据库显示了更多的模型实例,然后在我的应用程序中找到了。(我预计这是由于对数据库的异步 AJAX 调用)

我考虑过覆盖模型保存函数并在一个 AJAX 调用中执行模型更新,通过回调将模型保存调用排队。

但是,我认为我在找错树,并希望有更好的解决方案来解决这个问题。

非常感谢您的帮助。

4

1 回答 1

1

最简单的解决方案是禁用add按钮,直到上一个请求完成。假设您有一个带有#add按钮的视图:

addClicked: function(e) {
  var $add = this.$("#add");
  var model = new Model(this.parseAttributesFromView()); //or something...

  //disable add button
  $add.attr('disabled', true);

  model.save().done(function() {
    //enable add button after save succeeds
    $add.attr('disabled', false);
  });
}

或者,您可以单击事件处理程序,使其每毫秒debounce只能执行一次:n

//only allow add once every 100ms
addClicked: _.debounce(function() {
  //..
}, 100, true)

无论如何,如果您可以在视图级别解决问题,那么实现基于数据包或队列的解决方案似乎有点过头了。

于 2013-01-25T09:15:29.217 回答