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

时间:2018-04-19 10:17:30

标签: extjs localization extjs6 extjs6-classic extjs6.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论坛上找到了解决方案的线程:在本地化文件的config对象中添加本地化元素。例如:

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

1 个答案:

答案 0 :(得分:1)

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

  

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

首先,加载SELECT model, driver, COUNT(*) AS drives_for_this_model_and_driver FROM new_table GROUP BY model, driver ORDER BY model, driver; (您的本地化版本),然后加载clt.locale.en.view.users.UsersModel(非本地化版本)并完全替换本地化版本。

您想要做的是以下内容:

clt.view.users.UsersModel

这应该删除警告。然后,您可以实例化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.
});

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