我正在处理 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'
},
}