ExtJS 6:通过创建模型的新实例来加载嵌套数据

ExtJS 6 : load nested data by creating new instance of model

我尝试创建一个带有 hasMany 关联的模型,但是当我尝试访问商店时,它是空的。

这是我的模型:

基础模型:

Ext.define( 'Test.model.schema.BaseModel', {
    extend: 'Ext.data.Model',

    schema: {
        namespace: 'Test.model'
    }
} );

用户模型:

Ext.define('Test.model.user.UserModel', {
    extend: 'Ext.data.Model',

    fields: [
        {
            name: 'displayName',
            type: 'string'
        }
    ],

    hasMany: [
        {
            name: 'roles',
            model: 'user.RoleModel', // also try with Test.model.user.RoleModel
            associationKey: 'roles'
        }
    ]
});

角色模型:

Ext.define('Test.model.user.RoleModel', {
    extend: 'Ext.data.Model',

    fields: [
        {
            name: 'label',
            type: 'string'
        }
    ]
});

这是我的申请:

Ext.application({
    name: 'Test',

    models : [
        'Test.model.schema.BaseModel',
        'Test.model.user.RoleModel',
        'Test.model.user.UserModel'
    ],

    appFolder : contextPath + '/' + staticsPath + '/js/app',

    controllers : ['router.TestRouterController'],

    defaultToken : 'auth'
});

在我的控制器中,我尝试创建这样的用户模型:

var user = Ext.create('Test.model.user.UserModel', {
    displayName : 'Mick P.',
    roles : [
        {
            label: 'test'
        }
    ]
});

同JSon。

当我执行 user.roles().getAt(0) 时,我得到了 nulluser.roles().data.items 为空.

你看到我做错了什么了吗?

编辑 1: 我的问题 fiddle:https://fiddle.sencha.com/#fiddle/1e54

编辑 2 : 如果我用内存存储加载我的数据,它就会工作。但是为什么不直接加载模型呢。

Sencha 支持向我发送回复。也许你们中的一些人需要一个答案。

首先您需要阅读此文档页面:http://docs.sencha.com/extjs/6.0.2-classic/Ext.data.reader.Reader.html

当您将数据直接传递到模型构造函数时,它不会通过配置的 reader 传递,并且只会评估基本字段。

数据确实需要通过一个Reader。

如果您不想创建商店:

1 - 您需要在模型中声明代理

2 - 要使用嵌套数据创建模型,您必须执行类似的操作:

UserModel.getProxy().getReader().read(raw);

如果您需要 fiddle 示例,请告诉我。

- 迈克尔