我正在尝试创建一个网格,该网格具有带有 Ext JS 4.0.7 中的 PagingMemoryProxy 的存储。我希望能够编辑商店中的信息,但我发现如果我编辑信息并转到下一页,我会丢失上一页上编辑的信息。我的代码如下。
Ext.Loader.setConfig({
enabled: true
});
Ext.Loader.setPath('Ext.ux', 'examples/ux');
Ext.require('Ext.ux.data.PagingMemoryProxy');
Ext.onReady(function() {
var data = [
{name: 'jack johnson', text: 'record1'},
{name: 'jack johnson', text: 'record2'},
{name: 'jack johnson', text: 'record3'},
{name: 'jack johnson', text: 'record4'}
];
var store = Ext.create('Ext.data.Store', {
fields: ['name', 'text'],
data: data,
proxy: {
type: 'pagingmemory'
},
pageSize: 2
});
var grid = Ext.create('Ext.grid.Panel', {
store: store,
region: 'center',
id: 'thegrid',
plugins: [{
ptype: 'cellediting',
clicksToEdit: 1,
listeners: {
edit: function(editor, e) {
//e.record.commit();
}
}
}],
columns: [{
text: 'Name',
dataIndex: 'name',
editor: {
allowBlank: false
}
}, {
text: 'Text',
dataIndex: 'text'
}],
dockedItems: [{
xtype: 'pagingtoolbar',
store: store,
dock: 'bottom',
displayInfo: true
}],
});
Ext.create('Ext.Viewport', {
layout: 'border',
items: [grid]
});
});
我想知道如何将商店的数据与代理的数据同步,因为商店的数据实际上包含记录,而代理的数据包含记录的数据,因此不可能在代理中通过 id 找到记录。我决定尝试一下同步方法。
使用同步方法后,似乎没有发生任何事情,所以我想也许我应该提交记录......因此注释掉了
e.record.commit
代码。当这没有任何作用时,我开始在 Firebug 中进行挖掘,最终在 ext-all-debug 的第 44,600 行看到了 me.getNewRecords
代码。这最终导致我只返回未提交的记录(因为它显然检查了记录的幻像属性),因此,我编辑的任何记录都不会包含在第 44,600 行的 toCreate
变量中。
当我取出 e.record.commit 时,toCreate 变量现在包含已编辑的记录,但这些都无法帮助解决我的问题......只是初步探索了一下我发现的内容。
所以我的问题是,如何将存储与 PagingMemoryProxy 同步?是否可以?如果是这样,我该怎么办?
如有任何帮助,我们将不胜感激!
通过循环遍历我最终添加到 PagingMemoryProxy 的 JSON 数据解决了这个问题...基本上为 JSON 中的每个记录添加了一个“索引”值,因此当我想编辑存储中的记录时,我可以轻松索引使用此索引值进入其 PagingMemoryProxy。简单修复。
我也有同样的问题,请问你是怎么解决的,非常感谢~~