2012-12-14 17 views
5

È possibile eseguire questo processo in ExtJS 4.1.x?Memorizza con dati MixedCollection

var myMixedCollection = myStore.queryBy(...); 
var anotherStore = Ext.create('Ext.data.Store', { data: myMixedCollection, ... }); 
var myGrid = Ext.create('Ext.grid.Panel', { store: anotherStore, ... }); 

Perché la mia griglia non visualizza nulla o solo una riga vuota.
Quando registro il mio myMixedCollection non ci sono problemi tutti i dati sono qui ma quando apro il mio anotherStore con Firebug posso vedere c'è solo una riga vuota nel mio archivio dati.

risposta

7

myMixedCollection sarà una raccolta di record (istanze di modello) e fintanto che il nuovo negozio avrà lo stesso modello impostato, questo funzionerà! Quindi la risposta è

Beh, di sicuro è necessario chiamare getRange() sul myMixedCollection istanza

Ecco un esempio di lavoro

// 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() 
}); 

e la JSFiddle

+0

E possa la downvoter si prega di indicare il motivo per cui ha downvoted? – sra

+0

Sì, funziona, ho dimenticato di usare il metodo getRange(). Thx sra. – dgedge03

+2

i troll sono fuori :) – dbrin

2

Sì, è possibile.

Prova questo:

//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")); 
}); 

si può vedere woking sul jsfiddle qui: http://jsfiddle.net/lontivero/Lf9yv/1/

+0

cosa è successo !? perché -1? – lontivero

+0

Lol, così bene ecco la prova quindi ;-) +1 per la stessa risposta. Non so se la tua repurtation è già abbastanza, ma puoi vedere la percentuale upvote/downvote se metti la punta sul punteggio. Il tuo è ora 1/1;) last but not least, no I did not. – sra

+0

awww, -1 troll sono di nuovo circa? ecco un +1 per farli andare via :) – dbrin