我保存了一个Backbone模型,我正在使用的API需要' full = true'为了正常工作也要通过。所以例如要保存它需要做:
myModel.save(null, { data: { full: true} });
但是,如果我这样做它不起作用,如果我查看Chrome开发工具中的网络标签,我会看到请求的[object Object]:
另一方面,如果我使用JSON.stringify它似乎工作正常:
myModel.save(null, { data: JSON.stringify({ full: true}) });
当然我每次都可以使用JSON.stringify,但我真的很想知道为什么会这样,所以我可以创建一个自定义Backbone.sync ......
答案 0 :(得分:3)
我最终搞清楚了,如果有人遇到同样的问题,我会在这里回答我自己的问题。
在通过Backbone ajax发送之前,数据对象最终需要是一个字符串。因为在第一种情况下我没有这样做,所以它通过原生的.toString()方法被强制转换为字符串。例如:
var obj = {};
obj.toString(); //[object Object]
这对API毫无意义。
在第二种情况下,因为我对数据对象进行了字符串化,所以它运行正常。
Backbone.sync使用模型属性对数据对象进行字符串化,但如果传递显式数据对象则会覆盖它:
if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {
params.contentType = 'application/json';
params.data = JSON.stringify(options.attrs || model.toJSON(options));
}