0

Ext4.1を使用しています。アソシエーションを使用したjsonデータの読み込みに問題があります。フラットデータは完全にロードされ、「hasMany」のみが機能しません。(ロードされている場合、どこにも見つかりません)。レコードがロードされた場合、出席者の2つのストアとドキュメントの1つのストアを取得できるようにしたいと思います。

JSON形式をより良い形式に変更することもできます(提案があれば教えてください!)

私はこのjsonデータを持っています。

これは私の最初のモデルです:

Ext.define('App.model.package.LabVisit', {
    extend: 'Ext.data.Model',
    requires: [
        'App.model.package.Attendee',
        'App.model.package.Document'
    ],
    idProperty: 'labVisitID',

    fields: [
        {
            mapping: 'lab_visit_id',
            name: 'labVisitID',
            type: 'int'
        },
        {
            mapping: 'lab_id',
            name: 'labID',
            type: 'int'
        },
        ... some more irrelevant...
        {
            mapping: 'comments',
            name: 'comments'
        },
        {
            name: 'upddate'
        }
    ],
    hasMany: [
        /* edit: added foreignKey (also tried with: lab_visit_id) */
        { model: 'package.Attendee', name: 'attendeeLabList', associationKey:'attendee_lab', foreignKey: 'labVisitId' },
        { model: 'package.Attendee', name: 'attendeeEmpList', associationKey:'attendee_emp', foreignKey: 'labVisitId' }
        { model: 'package.Document', name: 'document', associationKey:'document' },
    ]

});

私は次の出席者モデルを持っています:

Ext.define('App.model.package.Attendee', {
    extend: 'Ext.data.Model',

    fields: [
        /* edit: added this field */
        {
            mapping: 'lab_visit_id',
            name: 'labVisitId'
        },
        {
            mapping: 'attendee_id',
            name: 'AttendeeID'
        },
        {
            mapping: 'first_name',
            name: 'firstName'
        },
        {
            mapping: 'last_name',
            name: 'lastName'
        },
        {
            name: 'email'
        }
    ]
});

次のドキュメントモデル:

Ext.define('App.model.package.Document', {
    extend: 'Ext.data.Model',

    fields: [
        {
            mapping: 'document_id',
            name: 'docID'
        },
        {
            mapping: 'document_name',
            name: 'docName'
        },
        {
            mapping: 'document_mimetype',
            name: 'mimeType'
        },
        {
            name: 'uploadID'
        }
    ]
});

最後に私の店:

Ext.define('App.store.package.LabVisit', {
    extend: 'Ext.data.JsonStore',
    requires: [
        'App.model.package.LabVisit'
    ],

    constructor: function(cfg) {
        var me = this;
        cfg = cfg || {};

        me.callParent([Ext.merge({
            storeId: 'labVisitStore',
            model: 'App.model.package.LabVisit',
            remoteSort: true,
            proxy: {
                type: 'ajax',
                api: {
                    read: API_URLS.getVisitList //url to the json
                },
                reader: {
                    type: 'json',
                    root: 'rows'
                }
            }
        }, cfg)]);
    }
});

編集: モデルに外部キーを追加し、hasMany

それでも違いはありません。これは私の出力です:

ストアの最初のレコード

私もそれを奇妙だと思います:それが壊れているなら、私は例外を期待します。そして、いつも不思議な店が2つありますが、その理由や目的はわかりません。

4

1 に答える 1

0

問題はこの部分にありました:

hasMany: [
    { model: 'package.Attendee', name: 'attendeeLabList', associationKey:'attendee_lab' },
    { model: 'package.Attendee', name: 'attendeeEmpList', associationKey:'attendee_emp' },
    { model: 'package.Document', name: 'document', associationKey:'document' },
]

@Izhakiは私を大いに助けてくれました。ありがとう!特にフィドルで。私はそこから始めて、コードを1つずつ切り替えることから始めました。私が見るまで、モデルが問題でした。

モデルは次のように定義する必要があります。 App.model.package.Attendee

モデルが認識されない/存在しない/提供されない場合、フレームワークに重大なエラー/警告が表示されないのは悲しいことだと思います...しかし、まあ、今は機能しています。

于 2012-08-20T09:35:34.813 に答える