ExtJs 6 - модель ассоциаций с несколькими запросами - PullRequest
0 голосов
/ 14 октября 2018

Я пытаюсь построить связь между двумя моделями, которые отправляют независимые запросы.Я определил хранилища ViewModel, прокси-серверы и ассоциации ссылок, и он работает только для вложенных данных, но не для отдельных запросов.Методы получения всегда не определены, а связанные записи не отображаются.Я запутался, потому что примеры документов (ссылка или hasOne) не работают для этого случая.Что я делаю не так, пожалуйста, помогите!

Версия: v6.5.3.6

Api-Response

/contracts.json
  "data": [{
    "id": 5,
    "tariff_id": 1,
    "user_id": 1,
    "name": "contract-name"
  }, ...]

/tariffs.json
  "data": [{
    "id": 1,
    "name": "Phone",
   }, ...]

Модели:

 Ext.define('App.model.contract.Contract', {
        extend: 'App.model.Base',

        requires: [
            'App.model.tariff.Tariff',
        ],

        idProperty: 'id',

        fields: [{
            name: "id",
            type: "int",
        }, {
            name: 'name',
            type: 'string',
        }, {
            name: 'tariff_id',
            reference: {
                type: 'App.model.tariff.Tariff',
                role: 'tariff',
                getterName: 'getTariff',
            },
        }],

        proxy: {
            type: 'api',
            url: '/contracts',
        },
    });

 Ext.define('App.model.tariff.Tariff', {
    extend: 'App.model.Base',

    fields: [{
        name: "id",
        type: "int",
    }, {
        name: 'name',
        type: 'string',
    }],

    proxy: {
        type: 'api',
        url: '/tariffs',
    },
});

ViewModel:

Ext.define('App.view.user.EditorModel', {
    extend: 'Ext.app.ViewModel',
    alias: 'viewmodel.user.editor',

    requires: [
        'App.model.tariff.Tariff',
        'App.model.contract.Contract',
    ],

    stores: {
        contracts: {
            model: 'App.model.contract.Contract',
            autoLoad:true,
        },

        tariffs: {
            model: 'App.model.tariff.Tariff',
            autoLoad:true,
        },
    },
});

Контроллер:

Ext.define('App.view.user.EditorController', {
    extend: 'App.ViewController',
    alias: 'controller.user.editor',

    test() {
        const contract = this.getStore('contracts').getById(5);
        console.log(contract);
        console.log(contract.get('tariff_id')); //return ids instead of entities
        console.log(contract.getTariff()); //not working
    },
});

PS my api прокси-ридер указывает на root data.Работает нормально.

PSS Я также попробовал hasOne безключевых ассоциаций без какого-либо успеха.

...