ExtJS 4: Как связать модель с другой, уже существующей моделью по идентификатору? - PullRequest
1 голос
/ 20 декабря 2011

Допустим, у меня есть экземпляр ModelA, который может создавать экземпляры hasMany ModelB.Учитывая идентификатор для записи ModelB, которая уже существует на сервере, как мне связать модель 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.Но, учитывая новый идентификатор участника (например, 599), как мне добавить еще одного человека на собрание?Является ли единственной возможностью загрузить экземпляр Person для идентификатора 599, а затем добавить этот экземпляр к «посетителям», например так?

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

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

    }
})

Когда выполняется meeting.save (), будет ли POST правильно включать толькоИдентификатор человека, как это?

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

Спасибо!

1 Ответ

0 голосов
/ 20 декабря 2011

Если честно ... ассоциации лучше всего использовать для чтения.Редактирование связанных моделей не является лучшим, поскольку нет никакой возможности настроить писателя или что-то еще.Для пользовательского интерфейса, да, добавьте новую модель в магазин, который вы получаете от посетителей (), но вам также необходимо отправить ее обратно на сервер.

...