Backbone save不会发送未定义的属性

时间:2015-05-21 14:35:10

标签: backbone.js

我有以下代码:

     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请求的请求标头中看不到它。

2 个答案:

答案 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

将它们设置为null