我有一个像这样配置的JsonStore:
var store = new Ext.data.JsonStore({
restful: true,
url: '/categories',
remoteSort: true,
idProperty: 'Id',
totalProperty: 'total',
root: 'results',
writer: new Ext.data.JsonWriter({
encode: false
}),
fields: [ 'Id', 'Name' ]
});
我从服务器获取一些数据,然后编辑其中一条记录。当我告诉商店保存时,它会将此JSON发送回服务器:
{
"results":
{
"Name":"Trivial123",
"Id":2
}
}
商店将JSON包装在results
属性(商店中配置的root属性)中。但是,服务器期望这样:
{
"Name":"Trivial123",
"Id":2
}
换句话说,序列化实体应该直接放在响应主体中,而不是包含在属性中。有谁知道如何配置商店来做到这一点?
答案 0 :(得分:3)
您需要覆盖JsonWriter中的数据呈现功能,如下所示:
var rootlessRenderFunction = function (params, baseParams, data) {
if (this.encode === true) {
Ext.apply(params, baseParams);
params = Ext.encode(data);
} else {
params.jsonData = data;
}
};
var myWriter = new Ext.data.JsonWriter({
encode: false,
writeAllFields: true
});
myWriter.render = rootlessRenderFunction;
var myStore = new Ext.data.JsonStore({
// ... various config values ...
writer: myWriter
});
这个“rootlessRenderFunction”实现与Ext JsonWriter的渲染代码相同,只是它没有在请求数据中插入根。
当然,这是一个黑客攻击。
答案 1 :(得分:0)
我假设你不能因为某种原因不能为商店设置根值?这就是我通常这样做的方式。