Сенча Touch 2.0 много-много-много ассоциаций - как? - PullRequest
2 голосов
/ 20 марта 2012

У меня было чертовски много времени, когда в Sencha Touch 2.0 работало много ассоциаций, тем более что их модели данных напрямую не учитывают отношения «многие ко многим».У меня есть две модели - «Люди» и «Роли» (их гораздо больше, но в этом примере важны две), каждая из которых имеет отношение «многие ко многим».

Первоначально я думал, что мог бы сделать это с hasMany в каждой из моделей, но теперь данные хранятся в третьем-нормальном виде в моей БД, я полагаю, что мне нужен третий, от лица к человекуобразец для подражания.Код здесь:

Ext.define('SMToolkit.model.Person', {
    extend: 'Ext.data.Model',
    config: {
        fields: [
            'id',
            'first_name',
            'last_name',
            'email',
            'address',
            'phone1',
            'phone2',
            'type',
            'location'
        ],
        hasMany: [
            {
                model: 'SMToolkit.model.Person_Role',
                name: 'role'
            }
        ],
        proxy: {
            type: 'rest',
            url : 'index.php/api/persons'
        }
    }

});


Ext.define('SMToolkit.model.Role', {
    extend: 'Ext.data.Model',

    config: {
        fields: [
            'id',
            'name',
            'description',
            'type',
            'show_id'
        ],
        hasMany: [
            {
                model: 'SMToolkit.model.Person_Role',
                name: 'person'
            },
            {
                model: 'SMToolkit.model.Scene_Role',
                name: 'scene'
            },
            {
                model: 'SMToolkit.model.Thing',
                name: 'thing'
            }
        ],
        proxy: {
            type: 'rest',
            url : 'index.php/api/roles'
        }
    }
});


Ext.define('SMToolkit.model.Person_Role', {
extend: 'Ext.data.Model',

config: {
    fields: [
        'person_id',
        'role_id'
    ],
    associations: [
        {
            type: 'belongsTo',
            model: 'SMToolkit.model.Person',
            name: 'person'
        },
        {
            type: 'belongsTo',
            model: 'SMToolkit.model.Role',
            name: 'role'
        },
    ],
    proxy: {
        type: 'rest',
        url : 'index.php/api/personsroles'
    }
}

});

Я подтвердил, что приведенный выше URL-адрес сотрудников действительно возвращает действительный набор данных, поэтому я знаю, что там должно быть что-то ...

Когда я просматриваю запись роли, я вижу поля для связанных хранилищ, но даже если я точно знаю, что в таблице Person_Role в базе данных есть соответствующая запись, массив Persons в записи пуст.

Я получаю запись примерно так:

onRoleSelect: function(list, index, node, record) {
    var editButton = this.getEditButton();
    if (!this.showRole) {
        this.showRole = Ext.create('SMToolkit.view.role.Show');
    }
    person = record.person();
    thing = record.thing();
    scene = record.scene();
    person.load();
    thing.load();
    scene.load();
    // Bind the record onto the view
    this.showRole.setRecord(record);

    // Push the show show view into the navigation view
    this.getRoleContainer().push(this.showRole);
},

Что я делаю не так?Почему нет данных об ассоциации?

1 Ответ

0 голосов
/ 30 ноября 2013

Вот альтернативный подход для обработки сложных модельных отношений в Сенче.Я еще не проверял это, но я думаю, что он, вероятно, будет также обрабатывать отношения «многие-многие».Рекурсивные отношения ММ могут вызвать у вас горе с помощью функции linkChildAssociations ().

...