Внедрение ассоциации ManyToMany в Ext Js 4 - PullRequest
2 голосов
/ 17 августа 2011

Я просматривал всюду в Интернете, но, похоже, не могу найти способ реализовать ассоциацию многих ко многим в моделях Est Js 4.Возьмите прототипный пример.У меня есть приложение с «Посты» и «Теги».Как мне представить это в моделях Ext Js 4 и отфильтровать теги по записям и записи по тегам?

Ответы [ 3 ]

4 голосов
/ 25 июня 2012

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 );
1 голос
/ 12 июля 2014

Для людей, которые находят этот вопрос во время поиска, начиная с ExtJS 5.0, они изначально поддерживают отношения «многие ко многим»:

http://docs.sencha.com/extjs/5.0.0/apidocs/#!/api/Ext.data.schema.ManyToMany

0 голосов
/ 11 августа 2017

Для ExtJS 6 реализовано ManyToMany .

Минимальная реализация:

Ext.define('App.models.Group', {
 extend: 'Ext.data.Model',

 manyToMany: [
     'User'
 ]

});

...