Амперсанд выборка детей / сбор с родителем

Как правильно загрузить свойство дочерней модели модели Амперсанда при выполнении выборки из коллекции?

У меня есть объект задачи:

{
    "id": 1
    "projectId": 2 // child entity id
    "name": "This task for project 1"
}

И я создал модель амперсанда:

var AmpModel = require('ampersand-model');
var Project = require('../project');

module.exports = AmpModel.extend({
    props: {
        id: ['number'],
        projectId: ['number'],
        name: ['string']
    },
    children: {
        project: Project
    }
});

И коллекция:

var AmpCollection = require('ampersand-rest-collection');
var Task = require('./task');

module.exports = AmpCollection.extend({
    model: Task,
    url: '/api/task'
});

Мой API очень прост, так как приложение хранит данные только в памяти:

var _ = require('lodash');
var store = require('../data'); // this is a file with some init data

function get(id) {
    return _.findWhere(store.tasks.data, { id: parseInt(id + '', 10) });
}

exports.list = function (req, res) {
    res.send(store.tasks.data);
};

exports.add = function (req, res) {
    var item = req.body;
    item.id = store.tasks.id++;
    store.tasks.data.push(item);
    res.status(201).send(item);
};

exports.get = function (req, res) {
    var found = get(req.params.id);
    res.status(found ? 200 : 404);
    res.send(found);
};

В Entity Framework я бы включил дочернюю сущность при получении. projectId поле будет отображаться на projects стол и рамки позаботятся об этом для меня.

1 ответ

Решение

Прочитав документацию и некоторую помощь в чате JavaScript, я понял, что смотрю на эту архитектуру неправильно.

Мой API должен читать источник данных задач и использовать полученный идентификатор проекта для загрузки данных проекта. Объект проекта будет назначен projects свойство задачи и весь объект задачи возвращены. Амперсанд возьмет на себя и соберет мою модель, как и ожидалось.

Другие вопросы по тегам