我尝试创建一个带有hasMany关联的模型,但是当我尝试访问商店时,它是空的。
这是我的模特:
BaseModel:
Ext.define( 'Test.model.schema.BaseModel', {
extend: 'Ext.data.Model',
schema: {
namespace: 'Test.model'
}
} );
UserModel:
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'
}
]
});
RoleModel:
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:我的问题的一小部分:https://fiddle.sencha.com/#fiddle/1e54
编辑2:如果我使用内存存储加载数据,它会起作用。但是为什么不直接加载模型呢。
答案 0 :(得分:2)
Sencha支持向我发送回复。也许有些人需要答案。
首先,您需要阅读此文档页面:http://docs.sencha.com/extjs/6.0.2-classic/Ext.data.reader.Reader.html
当您将数据直接传递给Model构造函数时,它不会通过已配置的阅读器传递,只会评估基本字段。
数据确实需要通过Reader。
如果您不想创建商店:
1 - 您需要将代理声明为模型
2 - 要创建具有嵌套数据的模型,您必须执行以下操作:
UserModel.getProxy().getReader().read(raw);
如果您需要一个小提琴示例告诉我。
- Mickael