重新计算模型

时间:2018-05-02 12:08:43

标签: extjs extjs6-classic

我需要在特定事件中重新计算模型中的字段。我想直接在模型中计算值,而不是在视图渲染器中计算,因为否则多个视图也需要自定义排序和分组功能,因此代码会大量膨胀。但是,如果有帮助,我可以使用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/#view/editor&fiddle/2g7g
我希望这能在没有73-75号线的情况下在模型中就位。

1 个答案:

答案 0 :(得分:1)

只需更改您的计算功能,即可将Globals.language作为参数发送:

{
     name: 'localizedName',
     persist: false,
     calculate: function(data) {
          return Globals.localize(data.name,Globals.language);
     }
}

然后更改您的localize函数以接收该参数:

localize: function(v,l) {
            return Globals[l][v];
}

最后,只需在按钮事件处理程序上更改Globals.language后重新加载商店:

handler: function(btn) {
   Globals.language = 'de';
   btn.up('grid').getStore().load();
}

删除" onUILocaleChange"完全。