ExtJS 4:如何通过ID将模型与另一个预先存在的模型相关联?

时间:2011-12-20 17:31:59

标签: extjs extjs4

假设我有一个ModelA实例,它可以'hasMany'ModelB实例。给定服务器上已存在的ModelB记录的id,如何将模型A与模型B关联? (API文档仅显示如何通过同时创建新的模型B实例和数据库记录来执行此操作。)

作为一个例子,假设我有一个应用程序,可用于安排与Person和Meeting对象的会议。服务器可能会为会议返回这样的JSON:

会议:

{
    id: '10',
    purpose: 'Code review',
    time: <timestamp>,
    attendees: [ 501, 532 ]
}

人:

{ id: 501, name: 'Kermit', email: 'kermit@thefrog.com' }

模型可能定义如下:

Ext.define('Person', {
    extend: 'Ext.data.Model',
    fields: ['id', 'name', 'email'],
    proxy: {
        type: 'rest',
        url : 'data/people',
        reader: { type: 'json' }
    }
});

Ext.define('Meeting', {
    extend: 'Ext.data.Model',
    fields: ['id', 'purpose', 'time'],
    hasMany: { model: 'Person', name: 'attendees' }
    proxy: {
        type: 'rest',
        url : 'data/meetings',
        reader: { type: 'json' }
    }
});

我理解加载会议后。我可以调用meeting.attendees()来访问每个Person模型。但是,考虑到新的与会者ID(例如,599),如何在会议中添加其他人?是唯一的选项,为id 599加载Person实例,然后将该实例添加到'与会者',像这样吗?

Meeting.load(10, {
    success: function(meeting) {

        Person.load(599, {
            success: function(person) {
                meeting.attendees().add(person);
                meeting.save();
            }
        });

    }
})

当meeting.save()运行时,POST是否会正确包含该人的ID,如下所示?

{
    id: '10',
    purpose: 'Code review',
    time: <timestamp>,
    attendees: [ 501, 532, 599 ] <-- '599' is new attendee
}

谢谢!

1 个答案:

答案 0 :(得分:0)

说实话......协会最适合阅读。编辑关联模型不是最好的,因为无法配置编写器或任何东西。对于UI,是的,将新模型添加到您从与会者()获得的商店,但您还需要将其发送回服务器。