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) 时,我得到了 null 和 user.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 示例,请告诉我。
- 迈克尔
我尝试创建一个带有 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) 时,我得到了 null 和 user.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 示例,请告诉我。
- 迈克尔