Как создать вложенную структуру, похожую на папку, в 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);
});