【发布时间】:2011-05-04 16:35:14
【问题描述】:
我使用Backbone.js 开发了一个很好的丰富应用程序界面,用户可以在其中非常快速地添加对象,然后只需点击相关字段即可开始更新这些对象的属性。我遇到的问题是,有时用户将服务器击败到初始保存,我们最终保存了两个对象。
如何重现此问题的示例如下:
-
用户单击“添加人员”按钮,我们将其添加到 DOM,但尚未保存任何内容,因为我们还没有任何数据。
person = new Person(); -
用户在名称字段中输入一个值,然后跳出它(名称字段失去焦点)。这会触发保存,以便我们更新服务器上的模型。由于模型是新的,Backbone.js 会自动向服务器发出 POST(创建)请求。
person.set ({ name: 'John' });person.save(); // create new model -
然后用户很快输入他们已经进入的年龄字段,输入 20 并进入下一个字段(年龄因此失去焦点)。这会再次触发保存,以便我们更新服务器上的模型。
person.set ({ age: 20 });person.save(); // update the model
因此,在这种情况下,我们期望一个 POST 请求来创建模型,一个 PUT 请求来更新模型。
但是,如果第一个请求仍在处理中,并且在上面第 3 点中的代码运行之前我们还没有得到响应,那么我们实际得到的是两个 POST 请求,因此创建了两个对象而不是一个。
所以我的问题是是否有一些最佳实践方法来处理这个问题和 Backbone.js?或者,Backbone.js 是否应该有一个用于保存操作的排队系统,以便在对该对象的上一个请求成功/失败之前不会发送一个请求?或者,或者,我应该构建一些东西来优雅地处理这个问题,要么只发送一个创建请求而不是多个更新请求,也许使用某种限制,或者检查 Backbone 模型是否在请求中间并等到该请求是完成。
我们将不胜感激您对如何处理此问题的建议。
我很高兴尝试实现某种排队系统,尽管您可能需要忍受我的代码,它的格式不如现有代码库!
【问题讨论】:
标签: javascript ajax backbone.js