Как разрешить удаление элементов массива в объекте массива Apostrophe - PullRequest
0 голосов
/ 27 апреля 2020

У меня довольно обширный сайт, построенный на основе Apostrophe-CMS, с интенсивным использованием схем объектов и интерфейсов редактора администратора. У меня были проблемы с массивами в течение очень долгого времени, и я никогда не мог понять, что происходит. Кажется, это происходит с каждым определенным массивом, но вот конкретный пример c (это добавленное поле для пользователей-апострофов):

{
name: 'subscriptions',
label: 'Memberships',
type: 'array',
titleField: 'subscriptionYear',
schema: [
    {
        name: '_subscription',
        withType: 'subscription-type',
        type: 'joinByOne',
        idField: 'subscriptionId',
        filters: {
            projection: {
                type: 1,
                name: 1,
                description: 1,
                agreement: 1,
                familyMembers: 1,
                title: 1,
                _allowedGroup: 1,
                allowedGroupId: 1,
                price: 1
            }
        }
    },
    {
        name: 'expirationDate',
        label: 'Expiration Date',
        type: 'date',
        required: false
    },
    {
        name: 'waiverSignature',
        label: 'Waiver Signature',
        type: 'string',
        readOnly: true
    },
    {
        name: '_payment',
        withType: 'payments',
        type: 'joinByOne',
        idField: 'paymentId',
        titleField: 'subscriptionType',
        filters: {
            projection: {
                paymentDate: 1,
                userEmail: 1,
                paymentAmount: 1,
                subscriptionType: 1,
                subscriptionYear: 1,
                receiptEmail: 1
            }
        }
    },
    {
        name: 'familyMembers',
        label: 'Family Members',
        type: 'array',
        titleField: 'familyMemberName',
        schema: [
            {
                name: 'familyMemberName',
                label: 'Family Member Name',
                type: 'string'
            },
            {
                name: 'familyMemberBirthDate',
                label: 'Family Member Birth Date',
                type: 'date'
            }
        ]
    }
]
}

Проблема, с которой я сталкиваюсь, заключается в том, что удаление элементов из этого массива не работает, если вы сначала не сохраните объект. Если я пытаюсь удалить элемент из массива без предварительного сохранения пользователя, запись мигает в списке (исчезает и почти сразу появляется снова). Там нет ошибок консоли. Но если я открою пользователя, сохраню его (даже если не было внесено никаких изменений), а затем снова открою пользователя, не закрывая список частей пользователя, я смогу удалить элементы из массива и снова сохранить. Есть идеи, почему это может происходить?

Спасибо!

1 Ответ

1 голос
/ 29 апреля 2020

Есть ли хорошее место для размещения кода для добавления идентификатора в массив элемента, если у него его еще нет?

В конечном счете, проблема заключается в создании значений массива в коде. Лучшее место для добавления идентификатора - когда это значение добавляется впервые. Существует служебный метод Apostrophe, self.apos.utils.generateId(), который можно использовать для этой цели. Если вы добавляете значение где-то за пределами Apostrophe, утилиты cuid или uuid могут помочь с этим (метод Apos использует cuid).

...