我有一個對象,也保存在服務器,我從該對象創建一個骨幹模型。我如何告訴骨幹,模型不是新的
但是,當我保存模型時,它正在執行一個PUT請求,這不是我想要的。如何告知Backbone數據已經存在於服務器中而不進行讀取?
我有一個對象,也保存在服務器,我從該對象創建一個骨幹模型。我如何告訴骨幹,模型不是新的
但是,當我保存模型時,它正在執行一個PUT請求,這不是我想要的。如何告知Backbone數據已經存在於服務器中而不進行讀取?
骨幹確定模型由checking if an id is set新穎性:
是否新款
model.isNew()
先後這種模式被保存到服務器了嗎?如果該模型還沒有
id
,則認爲它是新的。
當你保存模型,
以及由@JayC在評論中指出:
如果有一個問題,該ID不能從字面上id
,您可以使用idAttribute
說這是「身份」或重點領域。
請注意,如果存在id無法從字面上成爲'id'的問題,則可以使用idAttribute。 http://documentcloud.github.com/backbone/#Model-idAttribute來說哪個是「身份」或關鍵字段。 – JayC 2012-04-11 17:18:01
問題:我有一個新的模型(沒有ID),但它的前端設置了其他字段。當我保存模型時,它發送一個PUT請求。它不應該發送POST請求,因爲沒有ID? – archmage 2012-04-11 21:49:54
@archmage奇怪的是,它應該是一個POST。檢查這個小提琴http://jsfiddle.net/jq98Z/,它重現了預期的行爲。也許你會覆蓋默認同步或某個地方的動作映射? – nikoshr 2012-04-12 08:00:48
在這裏添加我的兩分錢,希望它可以避免我必須做的一些頭髮拉動。
直接通過構造函數設置一個模型的id屬性設置爲false或空不會做的伎倆,你必須真正從通過通過內存中刪除刪除
比如,我剛剛掙扎着從一個模型複製屬性鍵入另一種類型作爲新模型:
copy = Trip.clone()
#doesn't unset the id attribute
schedule = new models.Schedule(_.extend(copy.attributes, {id:null, trip_id:id})
#does unset the id attribute
delete schedule.id
schedule.save null, success: =>
# back from POST vs PUT
...
骨幹將更新請求映射到PUT http://documentcloud.github.com/backbone/#Sync,那麼您期望什麼行爲? – nikoshr 2012-04-11 16:41:31
我認爲更新請求已映射到POST,但PUt用於創建新項目。 – archmage 2012-04-11 16:45:16
如果有人想強制POST請求,有[多個替代方案](http://stackoverflow.com/a/41091957/1218980)。 – 2016-12-12 01:43:03