解耦数组存储

时间:2011-12-22 05:41:17

标签: arrays extjs

我发现ExtJS的Array存储是如此紧密绑定,如果我想将原始存储在某个临时存储中,它也会被修改。即如果我做这样的事情:

Ext.data.ArrayStores A,temp

A = {something}

temp = A

Itemselector:store = A

A.remove(一些记录)

我发现Itemselector:store是用A自动修改的,这就是我想要的,但是当A被修改时,temp也会被修改。如何在temp和A之间打破这种同步?

由于

2 个答案:

答案 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

这只是一种方法,还有很多方法。