Ext js 6.5 - поиск типа ассоциации (hasOne, hasMany, ownTo, et c) - PullRequest
1 голос
/ 05 августа 2020

Я обновил свое приложение с Sencha Touch 2.4 до Ext. Js 6.5.3.

В Sencha Touch 2.4 есть функция для ассоциации (Ext.data.association.Association) по имени функции getType (), которая возвращает тип ассоциации в виде строки, например: "hasOne".

как показано, например, здесь (исходный код модели Sencha Touch 2.4):

for (i = 0; i < associationCount; i++) {
        association = associations[i];
        associationName = association.getName();
        type = association.getType();
        allow = true;

        if (associationType) {
            allow = type == associationType;
        }

        if (allow && type.toLowerCase() == 'hasmany') {

В моем проекте, понимая, является ли тип ассоциации hasmany, hasone или принадлежащим, я могу «выбрать», какой тип SQL запроса создавать (изначально не написан мной, но это большой проект, и я не могу связаться с исходным разработчиком), так что это необходимо для меня.

Я пытаюсь заглянуть в документацию Ext js 6 / 6.5 и ничего не могу найти. Похоже, он давно устарел a go.

Я думал о вставке «типа» внутри модели как объекта моделей и типов, например:

{ 
  'MyProject.model.Receipt': 'hasone',
  'MyProject.model.Order': 'hasmany',
  'MyProject.model.invoice': 'belongsto',
  ...
}

а затем попытаться получить к нему доступ из самой модели и найти тип по ассоциации «родительская» модель.

Это кажется риском и излишним для такой (предполагаемой) простой задачи.

Я также пытался найти решения в Интернете, но похоже, что никто никогда не пытался найти решение для чего-то подобного.

Спасибо

1 Ответ

1 голос
/ 13 августа 2020

Свойство associations в записи немного сложно и неясно для нас, как разработчиков. Если вы используете свойство inverse в своих ассоциациях, они иногда будут появляться в свойстве associations, что является проблемой c. Я поднял вопрос в службе поддержки Sencha с просьбой предоставить надежный метод возврата фактических ассоциаций в записи, но я также придумал временное решение, чтобы определить, действительно ли они являются ассоциацией. Я расширил эту идею, возможно, на то, что может помочь вам с типами? Но вам придется проверить это, чтобы определить, действительно ли это работает для вас ... Я использую только hasOne и hasMany в своем коде, поэтому я не знаю, подходит ли это для belongsTo.

Вот Fiddle , а вот код:

Ext.override(Ext.data.Model, {
    isActualAssociation: function (role) {
        var isThing = !role.instanceName || role.fromSingle;
        if (!isThing) {
            console.log('found weirdo', role)
        }
        return isThing;
    },

    getAssociationType: function (association) {
        if (association.fromSingle) {
            return 'hasOne';
        }
        else if (association.storeName) {
            return 'hasMany';
        }
        return 'belongsTo';
    }
});
...