ExtJS - 覆盖默认存储数据
Posted
技术标签:
【中文标题】ExtJS - 覆盖默认存储数据【英文标题】:ExtJS - Overwrite default store data 【发布时间】:2021-12-12 20:34:24 【问题描述】:在 ExtJS 6.2 中,有一个包含一些默认数据的存储,我如何用数据库中的数据覆盖默认数据?
例子:
var store = Ext.create('Ext.data.Store',
fields: ['name', 'email', 'phone'],
data: [
'name': 'Lisa',
"email": "lisa@simpsons.com",
"phone": "555-111-1224"
,
'name': 'Bart',
"email": "bart@simpsons.com",
"phone": "555-222-1234"
,
'name': 'Homer',
"email": "home@simpsons.com",
"phone": "555-222-1244"
,
'name': 'Marge',
"email": "marge@simpsons.com",
"phone": "555-222-1254"
],
//idProperty: 'name',
proxy:
type: 'ajax',
url: 'data1.json',
reader:
type: 'json',
rootProperty: 'items',
totalProperty: 'total'
);
然后,在我的数据库中,丽莎实际上有电话号码“555-111-4321”,所以当我拨打store.load()
时,它将用“555-111-4321”覆盖丽莎的电话号码。
请看小提琴:https://fiddle.sencha.com/#view/editor&fiddle/3h05
【问题讨论】:
对不起,我不明白。您的小提琴会这样做,它首先使用默认数据加载,但很快它就会被 data1.json 中的数据替换。究竟需要什么? @PeterKoltai 这不是为我替换数据,而是在加载更多数据,在网格中它将显示 2 个 Lisa,而不是更新后的电话号码。 但是您的data1.json
本身包含两个 Lisas!所以当你加载它时,它会用两个 Lisas 替换网格内容,正如预期的那样。
@PeterKoltai 抱歉,我更新了小提琴。发生的情况是它从存储中删除所有内容并替换为 JSON 中的值,因此Homer
也被删除,我想添加新行(如果存在)并更新现有行,但不要删除任何行.
【参考方案1】:
可能有一个更优雅的解决方案,内置 ExtJS,但是在添加新行之前手动检查现有行并从原始存储中删除这些行。将这些行添加到小提琴代码的末尾:
newStore = Ext.clone(store);
newStore.load(addRecords: true,
callback: function (records, operation, success)
if (!success) return;
Ext.Array.each(records, function(record)
const existing = store.findRecord('name', record.get('name'));
if (existing != null)
store.remove(existing);
store.add(record);
);
);
【讨论】:
以上是关于ExtJS - 覆盖默认存储数据的主要内容,如果未能解决你的问题,请参考以下文章