0

我有以下 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 应用程序框架了。

4

1 回答 1

1

不幸的是,没有自动的、仅配置的方式来做到这一点。如果您查看loadRecord源代码,您会发现它只是从传递的记录中获取数据并调用setValues表单。

您需要覆盖loadRecord方法以从关联记录中挖掘所需的值。

于 2014-05-19T18:00:06.917 回答