У меня было чертовски много времени, когда в 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);
},
Что я делаю не так?Почему нет данных об ассоциации?