在Backbone.js中保存模型屬性時,執行PATCH
請求的正確方法是什麼?Backbone.js中的PATCH請求方法
回答
從Backbone.js v0.9.9開始,您可以簡單地將{ patch: true }
傳遞給save()
。
你必須重寫Backbone.sync
並擴展現有的方法映射
var methodMap = {
'create': 'POST',
'update': 'PUT',
'delete': 'DELETE',
'read': 'GET',
'patch': 'PATCH'
};
你必須在模型上創建自己的打補丁方法類似
Backbone.Model.prototype.patch = function(options)
{
// some code here that checks what attributes have changed since last save
var xhr = (this.sync || Backbone.sync).call(this, 'patch', this, options);
return xhr;
}
我相信你可以擴展主幹進一步包括OPTIONS
和HEAD
如果您需要
請注意,即使通過jQuery支持PATCH,OPTIONS和HEAD方法,您的最終用戶的瀏覽器可能不會。
除了James Cropchos answer我想補充以下,因爲this steals some hours從我也許可以幫助別人:
如果你使用model.save(attributesToPatchObject,{patch: true})
喜歡它是可能的,因爲骨幹v.0.9。 9如James Cropchos的回答中所述,您可能想知道如何確定自上次調用model.save()
以來哪些屬性已被更改爲attributesToPatchObject
,這是model.save()
的第一個參數(如果最近未保存模型,則爲model.fetch()
) 。
骨幹本身並沒有跟蹤這些屬性。我想model.changedAttributes()
可能適合的方法,但隨着backbone-doc says此方法返回
自上次 組已經改變只有模型的屬性的哈希值,或假,如果有沒有
所以這種方法不適合這種需要。經過一番研究,我發現骨幹本身並沒有跟蹤未保存的屬性(我知道,如果我已經仔細閱讀了文檔,這不是一個很好的發現)。
我發現backbone.trackit是一個主幹插件,通過將unsavedAttributes()
方法添加到模型中,它完全可以將所需的功能添加到主幹。 backbone.trackit的文檔說,這個方法:
對稱骨幹model.changedAttributes(),但它返回已經改變了自上次保存模型的屬性的哈希值,或假,如果有沒有。像changedAttributes一樣,可以傳入一個外部屬性哈希,返回該哈希中與模型不同的屬性。
它的工作原理是這樣的:
//fetch an existing model from server
model.fetch({
success : function(model, respose, options) {
//tell backbone.trackit to track unsaved Attributes
model.startTracking();
}
});
//now some changes to the model happen
model.set("someProperty", "someValue");
/* save the model to server using the PATCH-Method
and only send the unsaved Attributes;
in this case only "someProperty" is sent
*/
model.save(model.unsavedAttributes(), {patch: true});
由於unsavedAttributes()
回報假如果沒有未保存的屬性,你可以額外用來檢查是否unsavedAttributes()
回報什麼的,如果條件內包裝您save()
聲明然後false,並且只在需要的時候執行PATCH-Request(因爲更改了某些內容)。
注意:您沒有打電話fetch()
使用startTracking()
,因此您可以使用此方法,即使新創建的模型(在該模型model.isNew()
返回true),如果對於一個用例。
希望這可以爲某人節省一點研究時間。
- 1. PATCH請求方法:字段映射
- 2. RestTemplate PATCH請求
- 3. REST API PATCH請求
- 4. HTTP PATCH方法。請求正文中的內容
- 5. SCIM 2.0的PATCH請求
- 6. 對PATCH請求的響應
- 7. jQuery PATCH請求無法識別Marvin.JsonPatch
- 8. 通過HTTP PATCH請求包含數據的正確方法
- 9. 如何使用django-tastypie編寫PATCH請求的幫助方法?
- 10. HttpWebRequest PATCH方法和JSON給出了錯誤的請求
- 11. 在JAVA中使用HttpURLConnection的PATCH請求
- 12. 在Swift中使用PATCH的HTTP請求正在使用PATCH
- 13. 如何使用PATCH方法爲Salesforce更新發送請求?
- 14. 如何在Python中創建PATCH請求?
- 15. 在PHP中獲取PATCH請求數據
- 16. 在Django中獲取PATCH請求參數
- 17. Backbone.js中的PUT和POST請求
- 18. 如何將請求參數傳遞給Backbone.js中model.save()的Servlet中的dopost()方法
- 19. 如何解決PATCH請求,如果PATCH不支持serverside
- 20. Scribe PATCH請求不起作用
- 21. 如何正確發送PATCH請求
- 22. PATCH異步請求與Windows.Web.Http.HttpClient類
- 23. 如何製作Spring RestTemplate PATCH請求
- 24. 多個PATCH請求REST結束點
- 25. Web API + OData - PATCH請求400錯誤
- 26. Rails使用PATCH請求渲染或redirect_to
- 27. Rails:Heroku不明白:patch /:put請求?
- 28. Chrome跨域PATCH請求不起作用
- 29. $資源PATCH請求返回HTTP 415
- 30. django REST API中的request.data爲空使用AngularJS從Safari請求PATCH請求
哇,Stack Overflow不允許在標題中發佈全部大寫單詞的問題。聰明。 – Burnash