如何将 json 数据以 extjs Json Store 中的格式发送到服务器



>我有一个应用程序,当页面加载时,它会得到如下所示的json响应。

{
{"level2List":[{id:'id1', name:'sample'},....]},
{"level3List":[{id:'id1', name:'sample'},....]},
{"level4List":[{id:'id1', name:'sample'},....]}}

所以我正在获取根元素中的所有记录,如"level2List"、"level3List"、"level4List 等。通过使用这些记录,我正在创建一个可编辑的网格。当用户编辑任何记录时,我正在调用 store.sync 方法。然后,它仅将已编辑记录的 json 发送到后端服务器。喜欢

[{id:'id1', name:'sample'},....]

但是我需要以与页面加载相同的格式发送 json 数据。我的意思是我需要发送带有它们所属的根元素的编辑记录。

任何帮助将不胜感激。提前谢谢..

假设您的模型实例知道它们属于哪些"根元素",您可以通过创建自定义编写器来实现这一点。例如,如果扩展 Ext.data.writer.Json,并在其中创建自己的 writeRecords() 方法,则可以动态定义要通过的根

writeRecords: function(request, data) {
    var root = this.root; // HERE IS WHERE YOU COULD DEFINE YOUR ROOT
    if (this.allowSingle && data.length == 1) {
        // convert to single object format
        data = data[0];
    }
    if (this.encode) {
        if (root) {
        // sending as a param, need to encode
            request.params[root] = Ext.encode(data);
        } else {
            //<debug>
            Ext.Error.raise('Must specify a root when using encode');
            //</debug>
        }
    } else {
        // send as jsonData
        request.jsonData = request.jsonData || {};
        if (root) {
            request.jsonData[root] = data;
        } else {
            request.jsonData = data;
        }
    }
    return request;
}

这样,您只需要在代理上使用自定义编写器即可。

最新更新