Ext.ModelManager.getModel 已在 extjs 5 中弃用

Ext.ModelManager.getModel has been deprecated in extjs 5

我是 upgrading my extjs 4.2 app to extjs 5.1 .

ExtJs 4.2 中,我有创建 dynamic module 的代码,但是

in ExtJs 5.1 Ext.ModelManager.getModel has been deprecated and as per ExtJs 5.1 docs it saying use Ext.data.schema.Schema instead.

我尝试使用 Ext.data.schema.Schema.lookupEntity("DynamicModel"),但它抛出错误

[E] Ext.data.schema.Schema.lookupEntity(): 没有这样的实体 "DynamicModel".

如何在 ExtJs 5 中获取任何模型对象?

如何在 extjs 5.1 中实现 getModel() 方法的替换,请在下面找到我的代码,

if (!Ext.ModelManager.getModel('DynamicModel')){
    Ext.define('DynamicModel', {
       extend: 'Ext.data.Model',
       idProperty : uniqueIdProperty,
       fields: fields
    });
} else {
    Ext.ModelManager.getModel('DynamicModel').setFields(fields);
}

如果您想检查您的模型是否已经创建,那么您可以使用 isCreated of Ext.ClassManager

Ext.ClassManager.isCreated('MyModel');

如果 returns 为真,那么您可以

Ext.ClassManager.get('MyModel')

使用模式:Fiddle

if(!Ext.data.schema.Schema.instances.default.hasEntity('MyModel')){ // a default schema instance is created by default
            Ext.define('MyApp.models.MyModel', {
               extend: 'MyApp.models.Base',
               fields: [{name: 'field'}]  
            });
        } else {
            Ext.data.schema.Schema.instances.default.getEntity('MyModel');// returns the constructor MyApp.models.MyModel()
        }

如果你 运行 遇到上述语法的问题,就像我一样,因为 'default' 是一个保留字,你可以使用以下语法:

if (!Ext.data.schema.Schema.instances['default'].getEntity('MyModel')) {
    ...
}

IDK 为什么 Sencha 对属性使用保留字,但是...哦好吧...