Extjs 重新计算模型的字段
我需要在某个事件上重新计算模型中的字段。我希望直接在模型中计算值,而不是在视图渲染器中,因为否则多个视图还需要自定义排序和分组函数,因此代码会大量膨胀。但是,如果有帮助的话,我可以使用Extjs 重新计算模型的字段,extjs,extjs6-classic,Extjs,Extjs6 Classic,我需要在某个事件上重新计算模型中的字段。我希望直接在模型中计算值,而不是在视图渲染器中,因为否则多个视图还需要自定义排序和分组函数,因此代码会大量膨胀。但是,如果有帮助的话,我可以使用convert而不是calculate 模型上的字段: fields: [{ name: 'name', type: 'string' },{ name: 'localizedName', calculate: function(data) { return Glob
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
});
}
我制作了一把小提琴,展示了我希望实现的行为,但没有糟糕的黑客解决方法:我希望这在模型中没有第73-75行的情况下也能正常工作。只需更改计算函数,将Globals.language作为参数发送:
{
name: 'localizedName',
persist: false,
calculate: function(data) {
return Globals.localize(data.name,Globals.language);
}
}
localize: function(v,l) {
return Globals[l][v];
}
然后更改本地化函数以接收该参数:
{
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();
}
完全删除“OniCaleChange”。谢谢您的输入。如果我理解正确的话,更改参数部分是完全不必要的更改,
store.load
已经单独完成了。但是,有没有一种方法可以在不重新加载存储的情况下重新计算,这意味着丢失记录上的状态等?嗯,这不太好,但您可以这样做:btn.up('grid').getStore().each(function(rec){rec.set('localizedName',rec.get('localizedName'));