Как создать вложенную структуру, похожую на папку, в Real-Reaction-native?

Я пытаюсь создать базу данных области с элементами, вложенными в контейнеры. Это будет работать как стандартная файловая система, в которой контейнеры могут содержать как элементы, так и другие контейнеры. Как я могу создать этот тип структуры? Я настроил эти схемы:

const ItemSchema = {
    name: 'Item',
    primaryKey: 'id',
    properties: {
        id:         {type: 'string', indexed: true},
        title:      'string',
        createdAt:  'date',
        updatedAt:  'date',
        picture:    {type: 'data', optional: true},
        parent:     {type: 'Container', optional: true},
    }
};
const ContainerSchema = {
    name: 'Container',
    primaryKey: 'id',
    properties: {
        id:         {type:'string', indexed:true},
        title:      'string',
        createdAt:  'date',
        updatedAt:  'date',
        parent:     {type: 'Container', optional: true},
        childContainers: {type: 'list', objectType: 'Container'},
        childItems: {type: 'list', objectType: 'Item'},
    }
};

Я также настроил эту модель для Предметов, но еще не создал ее для Контейнеров:

class ItemModel {
    constructor(title, children) {
        this.id = Utils.guid();
        this.title = title;
        this.children = children;
        this.createdAt = new Date();
        this.updatedAt = new Date();
    }
}

Теперь, как мне фактически заполнить базу данных и назначить родителей и детей существующим элементам? Я знаю, что должен сделать это, чтобы создать предмет:

let item = new ItemModel('testItem')
db.write(() => {
            item.updatedAt = new Date();
            db.create('Item', item);
        })

Но я не знаю, куда я иду после этого. Документы царства дают этот пример:

carList.push({make: 'Honda', model: 'Accord', miles: 100});

но однажды я создаю контейнер с db.createКак я могу добавить существующий элемент в качестве дочернего элемента (не объявлять новый элемент, как показывают документы)?

1 ответ

Решение

После того, как вы создали элемент, вы можете использовать push() добавить его в список в контейнере.

Предполагая, что у вас уже есть контейнер, код может выглядеть примерно так:

let item = new ItemModel('testItem')
db.write(() => {
        item.updatedAt = new Date();
        var item = db.create('Item', item);
        container.childItems.push(item);
    });
Другие вопросы по тегам