Странно, следующий код скрипки работает, но в одном магазине всего 4 записи, а в другом 4 записи. К сожалению, вы предоставили недостаточно информации.
введите описание изображения здесь
Ext.application({
name: 'Fiddle',
launch: function () {
var floors = Ext.create('Ext.data.Store', {
storeId: 'Floors',
fields: ['id', 'title'],
idProperty: 'id',
data: [{
id: 0,
title: 'Untergeschoss'
}, {
id: 1,
title: 'Erdgeschoss'
}, {
id: 2,
title: 'Obergeschoss'
}, {
id: 3,
title: 'Dachgeschoss'
}]
});
Ext.create('Ext.data.Store', {
storeId: 'simpsonsStore',
fields: ['name', 'email', 'phone'],
data: [{
name: 'Lisa',
email: 'lisa@simpsons.com',
floor: 0
}, {
name: 'Bart',
email: 'bart@simpsons.com',
floor: 1
}, {
name: 'Homer',
email: 'homer@simpsons.com',
floor: 2
}, {
name: 'Marge',
email: 'marge@simpsons.com',
floor: 3
}]
});
Ext.create('Ext.grid.Panel', {
title: 'Simpsons',
store: Ext.data.StoreManager.lookup('simpsonsStore'),
plugins: {
gridfilters: true
},
columns: [{
text: 'Name',
dataIndex: 'name'
}, {
text: 'Email',
dataIndex: 'email',
flex: 1
}, {
text: 'Floor',
dataIndex: 'floor',
filter: 'number',
renderer: function (value) {
var floor = Ext.getStore('Floors').getById(value);
//var floor = Ext.getStore('Floors').findRecord('id', value, 0, false, true, true);
if (floor) {
return floor.get('title');
} else {
return null;
}
}
}],
height: 200,
width: 400,
renderTo: Ext.getBody()
});
}
});
В любом случае этот код будет работать очень медленно с огромным объемом данных. Метод render () вызывается при каждом изменении сетки (рендеринг, фильтр ...), поэтому, если у вас есть 100 записей в одном магазине и 1000 в другом, вы сделаете примерно 100 * 1000 итераций + вы используете Ext.getStore (' Floors '), что также может замедлить рендеринг. Чтобы он работал быстрее, вы можете подготовить данные один раз, создав floorId => attributes.floor map. Что-то вроде:
var floorsMap = {}; Ext.getStore('Floors').each(function(record) {
floorsMap[record.getId()] = record.get('title');
});
и рендерер будет иметь следующий вид:
renderer: function (value) {
return floorsMap[value];
}