2012-12-14 29 views
5

Czy jest to możliwe w ExtJS 4.1.x?Sklep z danymi MixedCollection

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

Ponieważ moja siatka nie wyświetla nic lub tylko jedną pustą linię.
Po zalogowaniu nie ma problemu, wszystkie dane są tutaj, ale kiedy otwieram mój anotherStore z Firebugiem, widzę, że w moim magazynie danych jest tylko jedna pusta linia.

Odpowiedz

7

będzie zbiorem rekordów (egzemplarzy modelu) i tak długo, jak nowy sklep ma ten sam zestaw modeli, to zadziała! Więc odpowiedź brzmi Tak

Cóż, na pewno trzeba zadzwonić getRange() na przykład

Tutaj myMixedCollection jest przykładem pracy

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

i JSFiddle

+0

I niech downvoter proszę podać dlaczego on downvoted? – sra

+0

Tak, działa, zapominam o użyciu metody getRange(). Thx sra. – dgedge03

+2

trolle są obecnie :) – dbrin

2

Tak, jest to możliwe.

Spróbuj tego:

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

Widać to Woking na jsfiddle tutaj: http://jsfiddle.net/lontivero/Lf9yv/1/

+0

co się stało !? dlaczego -1? – lontivero

+0

Lol, więc tu jest dowód ;-) +1 dla wszystkich tych samych odpowiedzi. Dunno, jeśli twoja repuracja jest już wystarczająca, ale możesz zobaczyć kurs upvote/downvote, jeśli przechyliłeś wynik. Twój jest teraz 1/1;) last but not least, nie, nie zrobiłem. – sra

+0

awww, -1 trolle znów są? tutaj jest +1, aby odejść :) – dbrin