2012-03-17 106 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進行響應,並在響應主體中表示創建的實體。