ManyToMany означает, что существует некоторая дополнительная таблица (или массив), которая содержит связи между А и В. Поэтому единственный способ реализовать это - использовать дополнительное хранилище.
В случае, когда имеется много предметов, каждый из которых может принадлежать нескольким категориям, вот определения модели:
Ext.define('BS.model.Item', {
extend: 'Ext.data.Model',
fields: [
{name: 'name' , type: 'string'},
],
proxy: {
type: 'direct',
api: {
create: Items.Create,
read: Items.GetTree,
update: Items.Update,
destroy: Items.Delete,
},
},
hasMany: {model: 'BS.model.ItemInCategory', name: 'categories', foreignKey: 'itemId'},
});
Ext.define('BS.model.ItemCategory', {
extend: 'Ext.data.Model',
fields: [
{name: 'name' , type: 'string'},
],
proxy: {
type: 'direct',
api: {
create: ItemCategories.Create,
read: ItemCategories.Read,
update: ItemCategories.Update,
destroy: ItemCategories.Delete,
},
},
});
Ext.define('BS.model.ItemInCategory', {
extend: 'Ext.data.Model',
fields: ['itemId', 'categoryId'],
// This will allow create operations with multiple records
clientIdProperty: 'clientId',
proxy: {
type: 'direct',
api: {
create: ItemInCategory.Create,
read: ItemInCategory.Read,
destroy: ItemInCategory.Destroy,
},
reader: {
type: 'json',
root: 'data',
},
},
});
Затем, чтобы получить все категории, к которым относится элемент:
Item.categories().load({
scope: this,
callback: function( aRecords, aOperation, aSuccess) {
Ext.each( aRecords, function( aAssociation ) {
// Do something here
}, this);
}
});
Затем добавить ассоциацию:
var iNewRecord = Item.categories().model.create( { categoryId: '16' } );
Item.categories().add( iNewRecord );