модель не знает о записях, он просто представляет одну запись, а метод преобразования предназначен, чтобы позволить вам преобразовать значение, или объединить другие поля в одно значение (обратите внимание, если вы не определите «зависит» от ссылки на другие поля в этом экземпляре, конверт вызывается только при загрузке данных, а не в том случае, если поля зависят от изменения).
Когда вы создаете сетку, сетка использует хранилище, в хранилище содержится коллекция записей, и это будет место для этого.
В конфигурации для вашего магазина вы можете добавить слушателя для «datachanged», который будет срабатывать, когда записи добавляются или удаляются из хранилища, здесь вы можете работать со всеми записями в магазине, выработать максимальное значение , и обновить записи.
Ext.create('Ext.data.Store', {
model: 'Example',
proxy: {
type: 'ajax',
url : 'example.json',
reader: {
type: 'json'
}
},
listeners:{
datachanged:function(store){
var maxValue=store.max('value');
store.beginUpdate();
store.each(function(record){
record.set('calculated_value',maxValue);
});
store.endUpdate();
}
}
});
При загрузке магазина с сервера, то вы будете реализации читатель, это, возможно, будет еще лучше, чтобы сделать это.
Ext.create('Ext.data.Store', {
model: 'Example',
proxy: {
type: 'ajax',
url : 'example.json',
reader: {
type: 'json',
transform: {
fn: function(data) {
var maxValue=0;
Ext.each(data.items,function(item){
if(item.value>maxValue) maxValue=item.value;
});
Ext.each(data.items,function(item){
item.calculated_value=maxValue;
});
return data;
},
scope: this
}
}
},
});
Его также стоит уточнить, если вам действительно нужно, чтобы дублировать это значение, я полагаю, вы тогда хочу ссылаться как-то в пределах сетки, возможно, в визуализаторе, вместо этого вы можете просто установить значение один раз в магазине:
Ext.create('Ext.data.Store', {
model: 'Example',
proxy: {
type: 'ajax',
url : 'example.json',
reader: {
type: 'json'
}
},
listeners:{
datachanged:function(store){
store.maxValue=store.max('value');
}
}
});
Затем в пределах вашей сетки колонке конфигурации, добавить/обновить рендерер (в данном примере я показываю значение в процентах от MaxValue):
{
dataIndex:'value',
renderer:function(value, metaData, record, rowIndex, colIndex, store, view){
return Math.round((100/store.maxValue)*value)+'%';
}
}