2

我正在开发需要本地化的 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”到“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
        }
    }
});
4

1 回答 1

1

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

[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.
});

这应该删除警告。然后你可以实例化 UsersModel

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

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

于 2018-04-19T11:14:40.550 回答