развязка Массив магазинов - PullRequest
0 голосов
/ 22 декабря 2011

Я обнаружил, что хранилища ExtJS Array настолько тесно связаны, что, если я хочу сохранить оригинал в каком-то временном хранилище, он также изменяется. т.е. если я сделаю что-то вроде этого:

Ext.data.ArrayStores A, temp

A = {что-то}

temp = A

Itemselector: store = A

A.remove (некоторые записи)

Я считаю, что Itemselector: store автоматически изменяется с помощью A, это то, что я хочу, но temp также изменяется при изменении A. Как я могу разорвать эту синхронизацию между темпом и A?

Спасибо

Ответы [ 2 ]

1 голос
/ 22 декабря 2011

Это не магазин ExtJS Array, который тесно связан, это 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().Но, насколько я знаю, это также мелкая копия, и, следовательно, не будет работать.

0 голосов
/ 22 декабря 2011

Полагаю, вам нужно создать один магазин и сохранить его резервную копию в исходном состоянии?Если это так, вы можете просто создать хранилище, а затем сохранить резервную копию только его данных, а не кеша.

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

Это всего лишь один из способов сделать это, есть еще много способов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...