您好我需要您的帮助:
我已经定义了Backbone Collection作为链接列表:Collection中的每个Model都引用了它的前身和后继。
将新模型插入到Collection中会触发一个事件,该事件会更新前导模型和后继模型,以引用新插入的模型并将这些模型存储到数据库中。
模型序列是关键,应用程序必须保持无状态。
问题:当一个紧张的用户快速按下添加按钮时,我发现数据库显示更多的模型实例,然后在我的应用程序中找到。 (我希望这是由于对数据库的异步AJAX调用)
我考虑过覆盖模型保存功能并在一次AJAX调用中执行模型更新,通过回调对模型保存调用进行排队。
但是我认为我正在咆哮错误的树,并期望有更好的解决方案解决这个问题。
非常感谢您的帮助。
答案 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)
在任何情况下,如果您可以在视图级别解决问题,那么实现基于数据包或队列的解决方案似乎有点过头了。