Backbone Collection充当链表和持久模型

时间:2013-01-25 08:49:38

标签: backbone.js collections stateless

您好我需要您的帮助:

我已经定义了Backbone Collection作为链接列表:Collection中的每个Model都引用了它的前身和后继。

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

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

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

我考虑过覆盖模型保存功能并在一次AJAX调用中执行模型更新,通过回调对模型保存调用进行排队。

但是我认为我正在咆哮错误的树,并期望有更好的解决方案解决这个问题。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分: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)

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