我在正確形成Backbone.Model.save調用時遇到了一些麻煩。我所調用的Web服務使用URL參數,但是我在Javascript中使用的是更改字段的對象。例如,我有對象{foo: 'bar', yar: 'har'}
,我希望Backbone.Model.save發送補丁請求到URL,如http://server/path/to/service?foo=bar&yar=har
將JSON編碼爲Backbone.Model.save的URL參數(patch = true)
聽起來很簡單吧?無論如何,這給我帶來了一堆麻煩。這裏就是我這麼遠(這不工作,我有成功/錯誤回調也一樣,但我不認爲這些都是對這個問題很重要):
object =
foo: 'bar',
yar: 'har'
model.save object,
patch: true
我已經嘗試了一些其他選項,也:
model.save object,
patch: true
emulateJSON: true
這組的contentType爲「application/X WWW的窗體-urlencoded」,這是很好的,但在由Backbone.sync Ajax請求發送的數據是:{模式:「 {「foo」:「bar」,「yar」:「har」}「。該服務得到了這一點,並不知道如何處理「模型」屬性。
model.save object,
patch: true
contentType: "application/x-www-form-urlencoded"
這只是代碼object
作爲一個字符串,配件是爲options.data
。同樣,該服務不知道如何處理它。
關於如何使這符合我的服務規範的任何其他想法?我可以讓自己調用ajax並自己更新模型(以及它所屬的集合),但我真的寧願不這樣做。這對我的作品Ajax請求是:
$.ajax
url: "http://server/path/to/service"
type: "PATCH"
data: object
更新:我的兩個前一選項沒有工作的原因是在Backbone.js的本身明確:
// Ensure that we have the appropriate request data.
if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {
params.contentType = 'application/json';
params.data = JSON.stringify(options.attrs || model.toJSON(options));
}
// For older servers, emulate JSON by encoding the request into an HTML-form.
if (options.emulateJSON) {
params.contentType = 'application/x-www-form-urlencoded';
params.data = params.data ? {model: params.data} : {};
}
見到這種情景,我也許想如果我釀的對象爲對象爲options.data
和空屬性發送的,也許它會工作:
model.save {},
patch: true
data: object
顯然,這嘗試修補一個選項「[object Object]」。我想它確實是對象的串化...在某處......但這可能接近正確答案?