В Sencha Touch мне часто нужно иметь панель Ext.DataView, содержащую небольшие записи подмножества или даже одну запись из коллекции в магазине.
Например, у меня может быть модель для Car
, в которой хранятся тысячи записей автомобилей в нем app.stores.cars
, но я хочу показать меньшую часть этих элементов (скажем, только спортивных автомобилей) в моем спискеOfSportsCars DataView
а также показывает более полный полный набор автомобилей в моем спискеOfCars DataView
.
Мой первый думал использовать несколько магазинов. Поэтому у меня будет один главный магазин для большого списка всех автомобилей, а второй магазин с фильтром для моего подмножества спортивных автомобилей. Однако теперь обновление модели из одного хранилища автоматически не обновляет запись в другом хранилище, поэтому это нарушает цель использования DataView, так как изменения не обновляются повсюду на странице при обновлении записей.
Моя вторая попытка состояла в том, чтобы перезаписать метод collectData
в DataView, который звучал точно так же, как и я:
var card = new Ext.DataView({
store: app.stores.cars,
collectData: function(records, startIndex){
// map over the records and collect just the ones we want
var r = [];
for( var i=0; i<records.length; i++ )
if( records[i].data.is_sports_car )
r.push( this.prepareData(records[i].data, 0, records[i]) );
return r;
},
tpl: new Ext.XTemplate([
'<tpl for=".">',
'<div class="car">{name}</div>',
'</tpl>'
]),
itemSelector: 'div.car'
});
Полный пример можно найти здесь.
Но, хотя он задокументировал, что я могу/должен переопределить этот метод, Sencha Touch действительно не нравится, когда вы возитесь с длиной массива, возвращаемой командой collectData, так что это был тупик.
Как другие занимаются отображением/обновлением нескольких коллекций одних и тех же записей?
ОБНОВЛЕНИЕ Была ошибка, препятствующая работе collectData
работать должным образом. С тех пор ошибка была зафиксирована в Sencha Touch 1.1.0.