Ext JS 6.2.0 本地化覆盖不起作用



我正在开发Ext JS MVC应用程序,需要本地化。尝试复制官方文档(http://docs.sencha.com/extjs/6.2.0/guides/core_concepts/localization.html(。区域设置文件加载正确。

控制台消息:

[W] 覆盖现有映射:"viewmodel.users" 来自 'clt.locale.en.view.users.UsersModel' to 'clt.view.users.UsersModel'. 这是故意的吗?

但不显示覆盖值(它们应该是网格列标题。

模型如下所示:

Ext.define('clt.view.users.UsersModel', {
    extend: 'Ext.app.ViewModel',
    requires:[
        // something
    ],
    // singleton: true,
    data: {
        key1: 'value1',
        key2: 'value2',
        keyN: 'valueN',
    },
    stores: {
        // something
    }
});

绑定到如下所示的值:

bind: { text: '{key1}' }

如果我将此模型设为单例,本地化将开始工作(网格标题显示本地化值(,但网格数据为空。那么,问题出在哪里呢?帮助我理解它。

更新。问题已解决。我在 Sencha 论坛上找到了带有解决方案的线程:在本地化文件的配置对象中添加本地化元素。例:

Ext.define('clt.locale.en.view.users.UsersModel', {
    override: 'clt.view.users.UsersModel',
    config: {
        data: {
            key1: 'value1',
            // some other keys
        }
    }
});

警告不是一个好兆头。在您的情况下,您不会像应该的那样应用覆盖。消息

[W] 覆盖现有映射:"viewmodel.users" 从 'clt.locale.en.view.users.UsersModel' 到 'clt.view.users.UsersModel'。这是故意的吗?

说首先加载clt.locale.en.view.users.UsersModel(您的本地化版本(,然后加载clt.view.users.UsersModel(非本地化版本(并完全替换本地化版本。

您要执行的操作如下:

Ext.define('clt.view.users.UsersModel', {
    extend: 'Ext.app.ViewModel', // <- EXTEND ViewModel class
    // define your locale-agnostic user model here
});

Ext.define('clt.locale.en.view.users.UsersModel', {
    override: 'clt.view.users.UsersModel', // <- OVERRIDE implementation in the overridden class
    // define your localized properties here.
});

这应该会删除警告。然后,您可以实例化用户模型

Ext.create('clt.view.users.UsersModel', {

但是你会得到它的本地化版本。

最新更新