我有以下代码:
this.myModel.save(this.patchAttributes, {
//Ignored if saving new record; will send a POST
patch: true,
success: function() {
success();
}
},
error: function() {
error();
}
});
如果我的patchAttributes有fieldName:undefined
之类的条目,我在PATCH请求的请求标头中看不到它。
答案 0 :(得分:2)
这是因为Backbone在发送数据之前是JSON.stringifying数据。 JSON规范不允许undefined
令牌。因此,JSON字符串中将省略undefined
的任何属性。
JSON.stringify({ foo: undefined });
// The output is "{}"
而不是undefined
,您应该使用 JSON规范的一部分的null
:
JSON.stringify({ foo: null });
// The output is "{"foo":null}"
答案 1 :(得分:0)
这是正确的行为,请看一下Backbone源代码(https://github.com/jashkenas/backbone/blob/master/backbone.js#L1357)。顺便说一句,我不认为它在任何Backbone文档中都有明确说明。在处理JSON时,它更像是常识
如果你想保留那些" undefined"变量,您需要使用defaults
http://backbonejs.org/#Model-defaults