我有以下 JSON 结构:
userAuth
----userAccount -- hasOne
----userAccountDetails -- hasMany
我想显示一个表单,显示来自 userAuth 和 userAccount 的数据,然后是一个网格,其中 userAccountDetails 中的每一行都有一行
这是 userAuth 模型的代码:
Ext.define('xxxx.model.UserAuth', {
extend: 'Ext.data.Model',
fields: [
{ name: 'id' },
{ name: 'email' },
{ name: 'userName' },
{ name: 'refIdStr' },
{ name: 'displayName' },
{ name: 'modifiedDate', type: 'date', }
],
requires: [
'xxxx.model.UserAccount',
'xxxx.model.UserAuthDetails',
],
hasMany: [
{
model: 'xxxx.model.UserAuthDetails',
name: 'authDetails',
foreignKey: 'userAuthId',
associationKey: 'userAuthDetails',
}
],
hasOne: [
{
model: 'xxxx.model.UserAccount',
name: 'userAcount',
associationKey: 'userAccount',
getterName: 'getUserAccount',
setterName: 'setUserAccount',
}
],
proxy: {
type: 'ajax',
startParam: 'skip',
limitParam: 'take',
url: settings.ApiUrl + '/model/UserAuth/?format=json',
baseParams: {
skip: '0',
take: '10',
},
reader: {
type: 'json',
root: 'results',
successProperty: 'success',
totalProperty: 'totalCount'
}
}
});
和 userAccount 模型
Ext.define('xxxx.model.UserAccount', {
extend: 'Ext.data.Model',
fields: [
{ name: 'username' },
{ name: 'id' },
{ name: 'name' },
{ name: 'email' },
{ name: 'slug' },
{ name: 'facebookId' }
],
belongsTo: 'xxxx.model.UserAuth',
proxy: {
type: 'ajax',
startParam: 'skip',
limitParam: 'take',
url: settings.ApiUrl + '/model/UserAccount/?format=json',
baseParams: {
skip: '0',
take: '10',
},
reader: {
type: 'json',
root: 'results',
successProperty: 'success',
totalProperty: 'totalCount'
}
}
});
和用户身份验证详细信息:
Ext.define('xxxx.model.UserAuthDetails', {
extend: 'Ext.data.Model',
fields: [
{ name: 'id' },
{ name: 'userAuthId' },
{ name: 'provider' },
{ name: 'userId' },
{ name: 'userName' },
{ name: 'displayName' },
{ name: 'firstName' },
{ name: 'lastName' },
{ name: 'email' },
{ name: 'modifiedDate' },
{ name: 'provider' },
],
belongsTo: [
{
model: 'xxxx.model.UserAuth',
isntanceName: 'userAuth',
getterName: 'getUserAuthDetails',
setterName: 'setUserAuthDetails',
associationKey: 'userAuthDetails'
}
],
proxy: {
type: 'ajax',
startParam: 'skip',
limitParam: 'take',
url: settings.ApiUrl + '/model/UserAuthDetails/?format=json',
baseParams: {
skip: '0',
take: '10',
},
reader: {
type: 'json',
root: 'results',
successProperty: 'success',
totalProperty: 'totalCount'
}
}
});
加载商店工作并且关联工作 - 当我调用record.getUserAccount().get('email')
它时返回我所期望的 - 所以一切正常。
现在,我的问题是——我到底是怎么把这些数据变成上述形式的?
我试过做这样的事情:
{
xtype: 'textfield',
fieldLabel: 'username',
allowBlank: false,
maxLength: 100,
name: 'userAccount.userName'
}
认为关联名称可能是一个很好的提示 - 但这不起作用......
来自最高模型(userAuth)的数据工作正常 - 我似乎无法将 hasOne 拉入表单。
我什至还没有尝试将 userAuthDetails 绑定到网格,但我怀疑这同样具有挑战性
有没有人设法让它工作?我只走关联路线,因为我认为它会使这类东西更清洁/更简单!
[编辑]
放弃尝试使用表单执行此操作,因为我很高兴现在只能读取此数据。我现在正试图在行扩展器内的 xtemplate 中显示这些数据。
我已经尝试了以下方法,但它不起作用!!!
plugins: [
{
ptype: 'rowexpander',
rowBodyTpl: [
'<p><b>Username:</b> {userName}</p>',
'<p><b>Email:</b> {userAccount.email}</p>',
'<tpl for="userAuthDetails">',
'<p>{provider}</p>',
'</tpl>'
]
}],
我需要什么样的巫术才能完成这项工作?一点都不明显!!!
ATM 我在想我不会再使用 ExtJs 了——我最近发现自己陷入了太多这样的黑洞,事情显然应该按照你所期望的方式工作——只要用谷歌搜索就可以看出每个人都希望这能工作。我已经断断续续地使用 ExtJs 多年了,但我认为现在是时候最终承认那里有更好的 js 应用程序框架了。