Ресурсы, не ссылающиеся на один и тот же связанный ресурс
Я определил два ресурса - 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
,