1

我正在处理 extjs 4.1.1 中的主从详细信息页面。

我有一个 Person 模型,它有许多 Address 模型。(我已经在 EXTJS 中配置了关系)

我有一个显示所有人员记录的网格,当我单击一条记录时,我会在另一个网格中显示此人的相关地址。

要填充我使用的第二个网格:

var grid2 = this.getAddressList(); //made a reference to this
var store = record.Addresses(); // this gives me the addresses store associated with the person record
...
grid2.reconfigure(store);

现在,当我将地址添加到此人的地址存储区时,将向其余服务器发出 ajax 请求。为了确保 extjs 也会将相关数据发送到服务器,我创建了一个特殊的 writer 类(来自 extjs 论坛的代码)。

Ext.define('Ext.data.writer.DeepJson', {
extend:'Ext.data.writer.Json',
getRecordData:function (record, operation) {
    var isPhantom = record.phantom === true,
        writeAll = this.writeAllFields || isPhantom,
        nameProperty = this.nameProperty,
        fields = record.fields,
        data = {},
        changes,
        name,
        field,
        key;

    if (writeAll) {
        // This is the branch that has been changed from the original Json Writer
        data = record.getData(true);
    } else {
        changes = record.getChanges();
        for (key in changes) {
            if (changes.hasOwnProperty(key)) {
                field = fields.get(key);
                name = field[nameProperty] || field.name;
                data[name] = changes[key];
            }
        }
    }
    if (isPhantom) {
        if (operation && operation.records.length > 1) {
            data[record.clientIdProperty] = record.internalId;
        }
    } else {
        data[record.idProperty] = record.getId();
    }

    return data;
}
});

在服务器端,它只是更新数据库,然后在 json 对象中将他的关联地址发回给我,以便 extjs 可以更新前端。

问题是 extjs 只能更新人员网格,但不能更新地址网格。即使服务器确实响应了记录的更新版本(服务器给了它一个 id),新创建的地址记录仍被标记为脏

有没有人遇到过类似的情况可以给我一些建议?我意识到我没有提供很多代码,但我愿意分享更多,我只是不知道需要哪些代码。

编辑 我使用 MyStore.load() 将数据加载到网格中 商店有一个如下配置的休息代理:

proxy:
    {
        type: 'rest',
        url: 'persons', //general read url
        headers : auth, //basic auth to connect to rest service
        reader:
        {
            type: 'json',
            root: 'persons',
            successProperty: 'renderList'
        },

        writer:Ext.create('Ext.data.writer.DeepJson', {root: 'persons'}), //above writer class
        api:
        {
            update: 'persons/person',
            create: 'persons/person',
            destroy: 'persons/person'

        },
    }
4

0 回答 0