3

我的 Json 数据:-

{
    "attributes": { 
        "list": [
        {
            "name":"attribute2",
            "value":"attribute2 value"
        }, {
            "name":"attribute1",
            "value":"attribute1 value"
        }]
    }
    "name":"name1",
    "id":1234
}

我的商店定义:-

Ext.define('Attr', {
    extend: 'Ext.data.Store',
    model: 'Attribute',
    autoLoad: true,

    proxy: {
        type: 'rest',
        url: 'data/1234',
        api: {
            update: 'newdata/1234'
        },
        reader: {
            type: 'json',
            root: 'attributes.list'
        }
    }
});

我的模型定义:-

Ext.define('Attribute', {
    extend: 'Ext.data.Model',

    fields: ['name','value']
});

显示上述商店的视图:-

{
    xtype: 'grid',
    store: 'Attr',
    id: 'attrpanel',
    columns: [
    {
        header: 'Name',
        sortable: true,
        dataIndex: ['name'],
        flex: 1
    }, {
        header: 'Value',
        sortable: true,
        dataIndex: ['value'],
        flex: 1
    }]
}

当前情况:我可以显示来自 Json 对象的数据值。

问题:每当我在编辑字段后在控制器中调用 this.getAttrStore().sync() 时,都会出现错误。我搜索了许多论坛并意识到在更新深度嵌套的 JSON 数据时似乎存在一些问题。

我曾想过获得彼得穆勒的补丁,但我还没有真正尝试过。

如果我错了,或者如果你能指出一些有用的东西,请纠正我,这将是一个很大的帮助。

非常感谢!

4

3 回答 3

1

我遇到了同样的问题,最后使用了beachdog 的 Sencha 论坛中的解决方案。在保存记录之前,他使用覆盖将关联数据应用到记录:

Ext.define('custom.JsonWriterOverride', {
    override: 'Ext.data.writer.Json',

    getRecordData: function(record) {
            Ext.apply(record.data,record.getAssociatedData()); // <--
            return record.data;
    }
});

然后,您可以将覆盖用作模型中的要求,如下所示:

Ext.define('My.model.Query', {
   extend: 'Ext.data.Model',

    requires: ['custom.JsonWriterOverride'], // <--
 ...
  proxy: {
        type: 'rest',
        url: 'webApp/query.do',
        reader: {
            type: 'json',
            root: 'data'
        },
        writer: {
            type: 'json',
            writeAllFields: true
        }
    }
 });

恕我直言,一个优雅而直接的解决方案;所有学分都归海滩狗所有。

于 2013-06-21T13:06:35.337 回答
1

根据我收集的信息,Ext JS 4.0 可能支持读取嵌套的 JSON,但它似乎不支持提交相同的 JSON。我有这个问题,其中 Order 包含 OrderItems。Ext 可以很好地读取它,但调用 Order.Save 不会包含这些项目。

这篇文章绝不是结论性的,因为 sencha 团队尚未回复它,但用户似乎说它只是不受支持。

http://www.sencha.com/forum/showthread.php?144653-ExtJS-4-updating-deeply-nested-Json-Data

于 2011-10-19T08:41:15.037 回答
0

你得到什么错误?您是在 HTTP 请求之前还是之后收到此错误?服务器发送的响应是什么?

无论如何,我建议为您的代理配置编写器。

于 2011-08-23T17:04:02.040 回答