ExtJS 4: magasins de clonage

Je suis à essayer de comprendre comment cloner un Ext.data.Store sans garder l'ancienne référence.

Laissez-moi vous expliquer mieux avec un peu de code. Voici les magasin source:

var source = Ext.create ('Ext.data.Store', {
    fields: ['name', 'age'] ,
    data: [
        {name: 'foo', age: 20} ,
        {name: 'boo', age: 30} ,
        {name: 'too', age: 10} ,
        {name: 'yoo', age: 80} ,
        {name: 'zoo', age: 30}
    ]
});

Suit un exemple de ce que je veux faire:

var target = source;
target.removeAll ();
//Here I need to have target empty and source unchanged
//But in this case, source is empty as well

Maintenant, dans l'exemple ci-dessus, la copie est effectuée par référence alors que j'ai besoin de le faire en valeur.
J'ai donc trouvé Ext.clone () dans les docs mais il semble que cela ne fonctionne pas pour objet complexe, comme Ext.data.Store:

var target = Ext.clone (source);
target.removeAll ();
//source is still empty

Puis j'ai essayé avec Ext.data.Model.copy () mais la seule façon de le faire est ceci:

var target = Ext.create ('Ext.data.Store', {
    fields: ['name', 'age']
});

source.each (function (model) {
    target.add (model.copy ());
});

Maintenant, pour mes raisons, je ne veux pas instancier un autre Ext.data.Storedonc je veux éviter cela:

var target = Ext.create ('Ext.data.Store', {
    fields: ['name', 'age']
});

J'aimerais avoir quelque chose comme ceci:

var target;

source.each (function (model) {
    target.add (model.copy ());
});

Mais, évidemment, cela ne fonctionne pas.

Alors, comment puis-je cloner la source de magasin?

source d'informationauteur Wilk | 2012-09-27