Составные модели (модели внутри моделей) или ручные связи между внешними ключами между моделями? - PullRequest
0 голосов
/ 30 сентября 2011

У меня есть две модели, и я хочу «вложить» одну в другую.Есть ли способ сделать это с помощью Sencha Touch?Мои модели выглядят так:

Ext.regModel('OuterModel', {
    fields: ['name']
});

var outerStore = new Ext.data.Store({
    model: 'OuterModel',
    data: [
        {name: 'item1'},
        {name: 'item2'}
    ]
});


Ext.regModel('InnerModel', {
    fields: ['a', 'b']
});
var innerStore = new Ext.data.Store({
    model: 'InnerModel',
    data: [
        {a: 1, b: 5},
        {a: 2, b: 5},
        {a: 3, b: 3}
    ]
});

Каждая OuterModel нуждается в ассоциированном InnerModel, и я хотел бы просто иметь поле, которое было внутренней модельюиз которого я мог создать Ext.List с.Я мог бы добавить outerName к InnerModel и запросить по outerName, но это выглядит неаккуратно, вручную управляя связью.

Является ли ручное решение единственным вариантом, или я могу сделать модель полем издругая модель?

1 Ответ

1 голос
/ 30 сентября 2011

Модели могут иметь ассоциации с другими моделями с помощью ассоциаций ownTo и hasMany.Например, допустим, мы пишем приложение для администрирования блога, которое занимается пользователями, сообщениями и комментариями.Мы можем выразить отношения между этими моделями следующим образом:

  Ext.regModel('Post', {
    fields: ['id', 'user_id'],

    belongsTo: 'User',
    hasMany  : {model: 'Comment', name: 'comments'}
 });

Ext.regModel('Comment', {
    fields: ['id', 'user_id', 'post_id'],

    belongsTo: 'Post'
 });

Ext.regModel('User', {
    fields: ['id'],

    hasMany: [
        'Post',
        {model: 'Comment', name: 'comments'}
    ]
 });

См. Документы для Ext.data.BelongsToAssociation и Ext.data.HasManyAssociation для получения подробной информации оиспользование и настройка ассоциаций.Обратите внимание, что ассоциации также могут быть указаны следующим образом:

Ext.regModel('User', {
    fields: ['id'],

    associations: [
        {type: 'hasMany', model: 'Post',    name: 'posts'},
        {type: 'hasMany', model: 'Comment', name: 'comments'}
    ]
});
...