Попытка привязать магазин к ViewModel

Я привык к ExtJs с шаблоном MVC, и я пытаюсь реализовать шаблон MVVM. Я не могу привязать магазин к своему мнению.

У меня есть основная сетка, и я пытаюсь открыть сетку деталей при выборе линии.

detailsView = mainPanel.add({
   xtype: 'rma-details',
   viewModel: {data: {id: id}}
})

Ext.define('Mb.view.rma.Details', {
    extend: 'Ext.grid.Panel',
    alias: 'widget.rma-details',
    requires: [
        'Mb.view.rma.DetailsController',
        'Mb.view.rma.DetailsModel'
    ],
    controller: 'rma-details',
    viewModel: {type: 'rma-details'},
    bind: {
        title: 'Retour n° {id}',
        store: '{details}'
    },
    (...)
});

Ext.define('Mb.view.rma.DetailsModel', {
    extend: 'Ext.app.ViewModel',
    alias: 'viewmodel.rma-details',
    requires: ['Mb.model.rma.Detail'],
    data: {
        id: 0
    },
    stores:{
        details: {
            model: 'rma.Detail',
            filters: [{
                property: 'rma',
                value: '{id}'
            }]
        }
    }
});

Ext.define('Mb.model.rma.Detail', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'id', type: 'int'},
        {name: 'rma', type: 'int'},
        (...)
    ],
    proxy: { // cf. 2nd subsidiary question
        (...)
    }
});

Название представления правильно связывается со значением id,

Но для магазина я получаю ошибки:

[E] Ext.data.schema.Schema.lookupEntity (): Нет такого объекта "rma.Detail".
Uncaught Error: нет такой сущности "rma.Detail".

Я не понимаю, почему ссылка на модель (model: 'rma.Detail') не распознается во ViewModel. Используя шаблон MVC, мне никогда не нужно было ссылаться на модель, я всегда ссылался на магазин, используя ссылку, аналогичную rma.Details,

Главный вопрос: как мне объявить модель rma.Details в ViewModel?

Вспомогательные вопросы:

  1. Это правильный способ установить значение id в представлении. ({xtype: 'rma-details', viewModel: {data: {id: id}}})
  2. Я привык определять прокси всегда в классе магазина. Здесь у меня больше нет класса магазина, потому что он определен во ViewModel. Правильно ли объявить это в классе модели, как я это делал выше?

1 ответ

Решение

Вам необходимо определить схему, а затем пространство имен для нее в объявлении модели. Или, что еще лучше, в базовой модели (см. Сводку схем из документации API).

При описании связей между сущностями желательно использовать сокращенные имена, которые не содержат общую часть пространства имен. Это называется entityName, а не его именем класса. По умолчанию entityName является полным именем класса. Однако, если используется пространство имен, общая часть может быть отброшена, и мы можем получить более короткое имя.

Вы попытались использовать сокращенное имя здесь, но, поскольку вы не определили пространство имен схемы, оно не может найти его в классе модели.

Вспомогательные ответы:

  1. Да, ты можешь это сделать.
  2. Здесь нет правильного или неправильного, на мой взгляд. Вы можете объявить прокси рядом с фильтрами в модели представления. Вы также можете объявить хранилище в отдельном классе и затем использовать его в view model (это подход, который я использую), указав здесь только конфиги, которые привязаны к каким-либо данным view model.
Другие вопросы по тегам