]>
git.proxmox.com Git - pve-manager.git/blob - www/new/data/DiffStore.js
2 * rstore: A storage to track changes
3 * Only works if rstore has a model and use 'idProperty'
5 Ext
.define('PVE.data.DiffStore', {
6 extend
: 'Ext.data.Store',
8 constructor: function(config
) {
11 var config
= config
|| {};
14 throw "no rstore specified";
15 if (!config
.rstore
.model
)
16 throw "no rstore model specified";
18 var rstore
= config
.rstore
;
22 proxy
: { type
: 'memory' }
25 me
.callParent([config
]);
27 var first_load
= true;
29 var cond_add_item = function(data
, id
) {
30 var olditem
= me
.getById(id
);
33 me
.model
.prototype.fields
.eachKey(function(field
) {
34 if (olditem
.data
[field
] !== data
[field
])
35 olditem
.set(field
, data
[field
]);
37 olditem
.endEdit(true);
40 var newrec
= Ext
.ModelMgr
.create(data
, me
.model
, id
);
41 var pos
= (me
.appendAtStart
&& !first_load
) ? 0 : me
.data
.length
;
42 me
.insert(pos
, newrec
);
46 me
.mon(rstore
, 'load', function(s
, records
, success
) {
53 // remove vanished items
54 me
.each(function(olditem
) {
55 var item
= rstore
.getById(olditem
.getId());
60 rstore
.each(function(item
) {
61 cond_add_item(item
.data
, item
.getId());
69 me
.fireEvent('datachanged', me
);