Магистральная реляционная коллекция с повторяющимися идентификаторами

Я использую реляционную основу для обработки моей коллекции.

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

{
    id: "things/1",
    children: [
    {
        id: "things/2",
        children: [
        {
            id: "things/3",
            children: null
        }
        ]
    },
    {
        id: "things/4",
        children: [
        {
            id: "things/3",
            children: null
        }
        ]
    },
    ]
}

Затем я пытаюсь использовать это как реляционную коллекцию, например. (написано на TypeScript).

constructor(options?) {
    // ...
    this.idAttribute = 'Id';
    this.relations = [{
        type: Backbone.HasMany,
        key: 'Children',
        relatedModel: 'Application.Models.MyModel',
        collectionType: 'Backbone.Collection'
    }
    ];
    super(options);
}

Однако, как только я получаю дубликаты идентификаторов с сервера, BBR сердито выдает исключение, и ничего не происходит. "Дубликат идентификатора!"

Должен ли я, возможно, генерировать какой-то поддельный идентификатор на основе руководства для этих моделей? Или есть способ сообщить реляционному хранилищу Backbone прекратить применение этого правила? Может быть, я могу просто выключить магазин вообще.

Я не использую это для получения каких-либо коллекций, связанных с выборкой или чего-то подобного. Я действительно использую его как хороший способ разбора рекурсивной структуры данных.

Я часто сталкивался с этой проблемой при написании тестов Jasmine, но мне удалось обойти ее, добавив случайный множитель *10 для каждого теста, чтобы убедиться, что идентификаторы разные. Но это боль в шее, чтобы сделать это. Так что, надеюсь, любые исправления здесь помогут мне и в модульном тестировании.

Я не прочь попробовать другой фреймворк, но некоторые модели в моем проекте используют BBR, поэтому он должен работать хорошо. Если есть что-то другое, что было бы более подходящим, тоже не стесняйтесь предлагать это.


person Craig Brett    schedule 22.05.2015    source источник


Ответы (2)


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

Я бы посоветовал вам просто отправить объекты в виде плоского массива, где каждый узел имеет массив childrenIds. Затем вы можете легко восстановить массивы children после получения объектов.

person geon    schedule 23.07.2015

Мой окончательный ответ на это состоял в том, чтобы перейти к ассоциациям магистрали. После написания файла d.ts (доступного в репозитории DefinitelyTyped) и некоторого начального рефакторинга для изменения блоков отношений все в значительной степени работает с места в карьер! Единственное, что вам нужно помнить, это установить любые коллекции по умолчанию в пустой массив в функции по умолчанию вашей модели. Надеюсь, это поможет кому-то!

person Craig Brett    schedule 04.02.2016