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'));