Для 1 клиента это n-заказов с n-продуктами в каждом. Отношения n-n появятся в общем обзоре, где это будет когда-либо Заказчик n-n Заказ n-n Product. В любом случае, каждый разработчик ждал перекрестной ссылки в записях таблицы, а не создания вложенного объекта типа MyRecord.

ние

Я сталкиваюсь с проблемой разработки приложений сExt.data.Model класс в ExtJS. Я постараюсь развить свои идеи до очень распространенного сценария интернет-магазина, чтобы вы могли следовать за мной. Буду очень признателен за любые комментарии по поводу моих мыслей и выводов!

модели

Предположим, вы хотите отобразить тот факт, что "Каждый клиент может заказать несколько продуктов«ExtJS. Из самых простых слов можно выделить эти три модели:Customer, Order, а такжеProduct,Order в этом случае то, что соединяетCustomerс иProducts.

ассоциации

Я обнаружил, что ExtJS на самом деле позволяет вам указать это(Customer)1-n(Order)1-n(Product) отношение с помощьюExt.data.HasManyAssociation а такжеExt.data.BelongsToAssociation классы. Но это то, что вы хотите? Хотели бы вы, чтобыProduct всегда принадлежитOrder? Что делать, если вы хотите иметь списокProductбез какой-либо связи сOrderчто бы то ни было?

магазины

Вот где он более специфичен для ExtJS. В ExtJS у вас естьExt.data.Stores для хранения всех ваших данных. Для меня естественный способ организовать мои данные - это иметьExt.data.Store для каждой из моих моделей:

CustomerStoreOrderStoreProductStore

Рассмотрим триExt.grid.Panels бок о бок; по одному на каждый магазин. При выборе клиента в одной сетке его заказы автоматически отображаются во второй сетке. При выборе заказа во второй сетке соответствующие товары появляются в третьей сетке.

Это звучит нормально для вас? Если нет, пожалуйста, прокомментируйте!

Объединяя все это вместе

Итак, теперь у нас есть три вещи, которые нам нужно объединить:

Модели и ихАссоциации (hasMany, belongsTo) иДанные (Stores)

Можно ли определить ассоциацию только с одной стороны отношения Модель-Модель? Например, могу ли я указать, чтоOrder hasMany Productно не учтите, чтоProduct belongsTo Order? Потому чтоProduct на самом деле может принадлежать более чем одномуOrder, Поэтому я указываю, чтоProduct модельhasMany Orderниже.

Вот модели в ExtJS:

Покупатель
Ext.define('Customer', {
    extend   : 'Ext.data.Model',
    requires : [
        'Order',
    ],
    fields   : [
           {name : 'id',          type : 'int'},
           {name : 'lastname',    type : 'string'}
           {name : 'firstname',   type : 'string'}
    ],
    hasMany: 'Order' /* Generates a orders() method on every Customer instance */
});
порядок
Ext.define('Order', {
    extend   : 'Ext.data.Model',
    fields   : [
            {name : 'id',          type : 'int'},
            {name : 'customer_id', type : 'int'}, /* refers to the customer that this order belongs to*/
            {name : 'date',        type : 'date'}
    ],
    belongsTo: 'Customer', /* Generates a getCustomer method on every Order instance */
    hasMany: 'Product' /* Generates a products() method on every Order instance */
});
Продукт
Ext.define('Product', {
    extend   : 'Ext.data.Model',
    fields   : [
            {name : 'id',          type : 'int'},
            {name : 'name',        type : 'string'},
            {name : 'description', type : 'string'},
            {name : 'price',       type : 'float'}
    ],
    /*
        I don't specify the relation to the "Order" model here
        because it simply doesn't belong here.

        Will it still work?
    */
    hasMany: 'Order'
});

А вот и магазины:

CustomerStore
Ext.define('CustomerStore', {
    extend      : 'Ext.data.Store',
    storeId     : 'CustomerStore',
    model       : 'Customer',
    proxy   : {
        type   : 'ajax',
        url    : 'data/customers.json',
        reader : {
            type           : 'json',
            root           : 'items',
            totalProperty  : 'total'
        }
    }
});
OrderStore
Ext.define('OrderStore', {
    extend      : 'Ext.data.Store',
    storeId     : 'OrderStore',
    model       : 'Order',
    proxy   : {
        type   : 'ajax',
        url    : 'data/orders.json',
        reader : {
            type           : 'json',
            root           : 'items',
            totalProperty  : 'total'
        }
    }
});
ProductStore
Ext.define('ProductStore', {
    extend      : 'Ext.data.Store',
    storeId     : 'ProductStore',
    model       : 'Product',
    proxy   : {
        type   : 'ajax',
        url    : 'data/products.json',
        reader : {
            type           : 'json',
            root           : 'items',
            totalProperty  : 'total'
        }
    }
});

Вот пример (не мной) с компаниями и их продуктамиhttp://superdit.com/2011/05/23/extjs-load-grid-from-another-grid/ , Он использует две модели и два магазина, но нет никаких ассоциаций определения.

заранее спасибо

-Konrad

Ответы на вопрос(4)

Ваш ответ на вопрос