我发现ExtJS的Array存储是如此紧密绑定,如果我想将原始存储在某个临时存储中,它也会被修改。即如果我做这样的事情:
Ext.data.ArrayStores A,temp
A = {something}
temp = A
Itemselector:store = A
A.remove(一些记录)
我发现Itemselector:store是用A自动修改的,这就是我想要的,但是当A被修改时,temp也会被修改。如何在temp和A之间打破这种同步?
由于
答案 0 :(得分:1)
这不是紧密绑定的ExtJS数组存储,它是Javascript!如果您搜索,您也会发现与其他框架类似的问题。有关stackoverflow本身的讨论很多。
现在,通过一个例子,这是你的解决方案:
var myStore = Ext.create('Ext.data.ArrayStore',{
fields: [
{name: 'fname',type: 'string'},
{name: 'age', type: 'int'}
],
data: [
['Sammy',28],
['Steve', 31],
['Albert', 30],
['Abdel', 28],
['Godwin',28]
]
});
var data = [];
var dupStore = new Ext.data.Store({
fields: [
{name: 'fname',type: 'string'},
{name: 'age', type: 'int'}
]
});
// Copy all records to a new array...
myStore.each(function (rec){
data.push (rec.copy());
});
dupStore.loadRecords(data); // Your duplicate store
请注意我们如何从myStore创建记录副本。像data = myStore.data
这样的简单赋值不会创建新数组!
另一种方法是使用clone()
创建对象。但据我所知,这也是一个浅层副本,因此不起作用。
答案 1 :(得分:-1)
我猜你想要的是创建一个商店并保持原始状态的备份副本?如果是这样,你可以只创建商店,然后将其数据的备份更多地保留在它的缓存中。
Ext.data.ArrayStores A;
//fill a with records
var cacheOfAData = A.data;//Takes all the data in the store and caches it.
A.remove(someRecords);//Remove records the cacheOfAData should still remain with the original data
这只是一种方法,还有很多方法。