我正在开发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', {
但是你会得到它的本地化版本。