2010-05-27 88 views
1

我有一个JsonStore配置,像这样:如何让ExtJS JsonStore将JSON数据直接放入请求正文中?

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 
} 

换句话说,序列化的实体,应直接在响应体内放,而不是裹着的属性。有谁知道我如何配置商店来做到这一点?

回答

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”的实施是一样的,除了它的分机JsonWriter的渲染代码在不插根请求数据。

当然这是一种黑客攻击。

0

我假设你不能仅仅因为某些原因而不为商店设置根值?这是我通常这样做的方式。

+0

我从服务器获取的JSON实际数据放在'results'属性中。你只是给了我一个想法,但我会尝试。 – 2010-05-28 19:46:32

+0

这是什么想法? – Gary 2011-04-13 15:16:53