Ресурсы, не ссылающиеся на один и тот же связанный ресурс

Я определил два ресурса - Foo и Bar - где Foo содержит один бар. Однако при вставке некоторых основных данных в этом формате, если несколько Foo ссылаются на одну и ту же панель, тогда ссылка на нее дается только для самого последнего загруженного Foo. Предыдущие Foo не имеют бара (он не определен)

Ресурсы определены так:

DS.defineResource({
    name: 'Foo',
    relations: {
        hasOne: {
            Bar: {
                foreignKey: 'fooId',
                localField: 'bar'
            }
        }
    }
});

DS.defineResource({
    name: 'Bar',
    relations: {
        belongsTo: {
            Foo: {
                localField: "foo",
                localKey: "fooId"
            }
        }
    }
});

И я ввожу следующие данные испытаний:

var foosJson = [
    {
        id: 1,
        bar: {
            id: 100
        }
    }, {
        id: 2,
        bar: {
            id: 100
        }
    }, {
        id: 3,
        bar: {
            id: 200
        }
    }
];

Почему первый Foo не имеет ссылки на тот же бар, что и второй Foo?

Поиграйтесь с тестами Жасмин здесь: http://jsfiddle.net/dimmreaper/c0o1kqd0/

1 ответ

Решение

Это не работает, потому что похоже, что вы на самом деле пытаетесь установить отношения "многие ко многим". "Бар принадлежит к foo" означает, что любой отдельный бар принадлежит (самое большее) ровно одному foo, но здесь вы пытаетесь сделать так, чтобы бар #100 принадлежал как foo #1, так и foo #2, что не является отношением ownTo.

Поскольку каждый столбец на самом деле не имеет поле, которое localKey надеется (fooId), JSData пытается определить поле для вас, и из-за того, как работает итерация, JSData делает вывод, что столбец № 100 принадлежит foo #2, поэтому foo1.bar будет undefined,

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