2012-12-14 3 views
5

Est-il possible de faire ce processus dans ExtJS 4.1.x? Parce que ma grille n'affiche rien ou seulement une ligne vide.
Lorsque je me connecte myMixedCollection il n'y a pas de problème toutes les données sont là mais quand j'ouvre mon anotherStore avec Firebug je peux voir qu'il n'y a qu'une seule ligne vide dans mon magasin de données.Stocker avec des données MixedCollection

Répondre

7

myMixedCollection sera une collection d'enregistrements (instances de modèle) et tant que le nouveau magasin aura le même jeu de modèles, cela fonctionnera! Donc, la réponse est Oui

Eh bien, pour que vous devez appeler getRange() sur le myMixedCollection exemple

Voici un exemple de travail

// Set up a model to use in our Store 
Ext.define('Simpson', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     {name: 'name', type: 'string'}, 
     {name: 'email', type: 'string'}, 
     {name: 'phone', type: 'string'} 
    ] 
}); 

var s1 = Ext.create('Ext.data.Store', { 
    model:'Simpson', 
    storeId:'simpsonsStore', 
    fields:['name', 'email', 'phone'], 
    data:{'items':[ 
     { 'name': 'Lisa', "email":"[email protected]", "phone":"555-111-1224" }, 
     { 'name': 'Bart', "email":"[email protected]", "phone":"555-222-1234" }, 
     { 'name': 'Homer', "email":"[email protected]", "phone":"555-222-1244" }, 
     { 'name': 'Marge', "email":"[email protected]", "phone":"555-222-1254" } 
    ]}, 
    proxy: { 
     type: 'memory', 
     reader: { 
      type: 'json', 
      root: 'items' 
     } 
    } 
}); 

var mixed = s1.queryBy(function(rec){ 
    if(rec.data.name == 'Lisa') 
     return true; 
}); 

var s1 = Ext.create('Ext.data.Store', { 
    model:'Simpson', 
    storeId:'simpsonsStore2', 
    fields:['name', 'email', 'phone'], 
    data: mixed.getRange(), 
    proxy: { 
     type: 'memory', 
     reader: { 
      type: 'json' 
     } 
    } 
}); 

Ext.create('Ext.grid.Panel', { 
    title: 'Simpsons', 
    store: Ext.data.StoreManager.lookup('simpsonsStore2'), 
    columns: [ 
     { text: 'Name', dataIndex: 'name' }, 
     { text: 'Email', dataIndex: 'email', flex: 1 }, 
     { text: 'Phone', dataIndex: 'phone' } 
    ], 
    height: 200, 
    width: 400, 
    renderTo: Ext.getBody() 
}); 

et JSFiddle

+0

Et peut le dire downvoter s'il vous plaît pourquoi il a downvoted? – sra

+0

Oui cela fonctionne, j'oublie d'utiliser la méthode getRange(). Thx sra. – dgedge03

+2

les trolls sont sortis :) – dbrin

2

Oui, c'est possible.

Essayez ceci:

//this is the model we will be using in the store 
Ext.define('User', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     {name: 'id', type: 'int'}, 
     {name: 'name', type: 'string'}, 
     {name: 'phone', type: 'string', mapping: 'phoneNumber'} 
    ] 
}); 

var data = new Ext.util.MixedCollection(); 
data.add('key1', { 
    id: 1, 
    name: 'Ed Spencer', 
    phoneNumber: '555 1234' 
}); 
data.add('key2', { 
    id: 2, 
    name: 'Abe Elias', 
    phoneNumber: '666 1234' 
}); 

//note how we set the 'root' in the reader to match the data structure above 
var store = Ext.create('Ext.data.Store', { 
    model: 'User', 
    data : data.items, 
    proxy: { 
     type: 'memory', 
     reader: { 
      type: 'json', 
      root: 'users' 
     } 
    } 
}); 

store.each(function(record){ 
    console.log(record.get("name")); 
}); 

Vous pouvez le voir sur woking jsFiddle ici: http://jsfiddle.net/lontivero/Lf9yv/1/

+0

que s'est-il passé? pourquoi -1? – lontivero

+0

Lol, si bien voici la preuve alors ;-) +1 pour tous la même réponse. Dunno si votre repeater est déjà suffisant, mais vous pouvez voir le taux upvote/downvote si vous donnez un pourboire sur le score. Le vôtre est maintenant 1/1;) last but not least, non je n'ai pas fait. – sra

+0

awww, -1 trolls sont à nouveau? voici un +1 pour les faire partir :) – dbrin

Questions connexes