2012-03-17 54 views
4

我有一个Backbone应用程序,我在其中创建一个新模型并保存它。下面的代码的片段,与调试,在CoffeeScript中:Backbone.js发出`model.save()`调用的GET请求

newListing = new Listing 
console.log "New?", newListing.isNew() 
newListing.save creation, { 
    wait: true 
    success: (model, response) => 
    console.log "SAVED", model 
    console.log "RESPONSE", response 
} 

对于调试,我也重写Backbone.sync

oldSync = Backbone.sync 
Backbone.sync = (method, model) -> 
    console.log "Syncing:", method, model 
    oldSync(arguments...) 

通常情况下,这工作正常。我得到这个在控制台:

New? true 
Syncing: create > Listing 
SAVED > Listing 
RESPONSE > Object 

和网络督察看到:

listings POST 200 application/json 

我也看到登录我的(Rails)的应用程序日志中的POST请求。

但是,创建了几个房源后,我开始在控制台上看到以下行为:

New? true 
Syncing: create > Listing 
SAVED > Listing 
RESPONSE [> Object, > Object, > Object, > Object, > Object, > Object] 

其中每个Object已经保存在数据库中的列表。 Network Inspector和我的应用程序日志还表明Backbone对/列表执行了GET请求。此外,已经“保存”的第三行中的Listing是列表的客户端表示(没有服务器通常插入的一些附加细节)。

我一直没能找到任何模式,以此行为;有时,Backbone坚持在GET之后发送GET,并且在刷新之后开始工作。有时它会一直运行直到我重新启动应用程序服务器乐于探索任何建议!

[编辑]

好吧,一些侦探后,看来我打电话fetch()Listings收集后,Listing#save()开始这样做。该问题仅出现在笔记本电脑上,该笔记本电脑正在运行Chrome Dev(v19)。在其他浏览器和较旧版本的Chrome上,它工作正常。

+0

乍一看,当您使用您正在构建的应用程序时,似乎有一些事件绑定正在闲逛。你有可能从你的意见中发布代码吗? – ryanmarc 2012-03-19 17:08:08

+0

在过去三天里,我们花了很多时间写模特和藏品来与我们的休息服务交流,但我从未见过这种情况。你有没有现场的例子? – tkone 2012-03-21 23:47:47

+0

+1'侦察':) – itsjeyd 2014-02-11 08:56:48

回答

0

显然这是一个应用程序特定的问题。我的猜测是这个问题是服务器端。也许你的服务器端代码在创建之后返回所有的列表,而不是仅仅创建一个。在成功创建时,服务器应该以200 OK进行响应,并在响应主体中表示创建的实体。