Пересчитать поле модели
У меня есть требование пересчитать поле в модели для определенного события. Я хочу вычислить значение непосредственно в модели, а не в средствах визуализации представлений, потому что в противном случае для нескольких представлений также потребуются настраиваемые функции сортировки и группировки, поэтому код будет сильно раздуваться. Я мог бы однако использовать convert
вместо calculate
, если это поможет.
Поля на модели:
fields: [{
name: 'name',
type: 'string'
},{
name: 'localizedName',
calculate: function(data) {
return Globals.localize(data.name);
}
}]
и функция в магазине:
onUILocaleChange: function() {
this.each(function(record) {
// force recalculate
});
}
Я сделал скрипку, демонстрирующую поведение, которого я хочу достичь, но без неудачного хакерского обходного пути: https://fiddle.sencha.com/
Я хотел бы, чтобы это работало без линии 73-75, на месте в модели.
1 ответ
Просто измените свою функцию вычисления, чтобы отправить Globals.language в качестве параметра:
{
name: 'localizedName',
persist: false,
calculate: function(data) {
return Globals.localize(data.name,Globals.language);
}
}
А затем измените вашу функцию локализации, чтобы получить этот параметр:
localize: function(v,l) {
return Globals[l][v];
}
И наконец, просто перезагрузите магазин после изменения Globals.language на обработчик событий кнопки:
handler: function(btn) {
Globals.language = 'de';
btn.up('grid').getStore().load();
}
Удалить "onUILocaleChange" полностью.