Я не думаю, что вы можете создавать самосвязанные модели в Backbone-реляционных (как описано в другом ответе здесь).Когда я попробую это, я получаю сообщение об ошибке: для Backbone-реляционного необходимо определить relatedModel, прежде чем он сможет создать с ним отношения.
Итак, я изменил шаблон «многие ко многим», описанный вРеляционно-магистральная страница:
https://github.com/PaulUithol/Backbone-relational#many-to-many-relations
По сути, я создаю модель связывания, которая содержит ссылки на упоминаемую модель, чтобы эта модель связи была доступна для Backbone-реляционный, когда он определяет фактическую модель.
Я считаю удобным дать этой модели связи отдельную связь с обеими моделями данных в связи, чтобы любая из них могла выполнять реляционные поиски поиска.С другой стороны, вы можете просто вставить вторую модель в модель связи, но тогда связь будет однонаправленной, если вы явно не добавите свои собственные ссылки на модель связи в модель данных.
Давайте создадим модель «Person», у которой есть дети, которые являются другими моделями «Person».
Person = Backbone.RelationalModel.extend({
relations: [
{
type: 'HasMany',
key: 'Children',
relatedModel: 'FamilyRelation',
reverseRelation: {
key: 'Childrenof'
}
},
{
type: 'HasMany',
key: 'Parent',
relatedModel: 'FamilyRelation',
reverseRelation: {
key: 'Parentof'
}
}
]
});
FamilyRelation необходимо определить> до
// FamilyRelation is link model between two "Person"s
// to achieve the Fan/Admiree relation.
FamilyRelation = Backbone.RelationalModel.extend({
})
Если мы создадим два "Person":
KingKong = new Person({name: 'KingKong'});
SonOfKong = new Person({name: 'SonOfKong'});
Тогда мы можем создать модель FamilyRelationship.это «родительский» SonOfKong, и добавьте его к потомкам KingKong с помощью этой строки:
KingKong.get("children").add({"parentof":SonOfKong});
Затем вы можете добавить вспомогательные функции в модель Person, чтобы извлечь вложенные модели из модели FamilyRelationship, ибольше не нужно трогать FamilyRelation, кроме как для того, чтобы убедиться, что он сохраняется и извлекается соответствующим образом.
Для неиерархических отношений (скажем, «Друг», а не «Родитель / Ребенок», вам все еще нужны этидве связи с моделью связывания, чтобы иметь возможность извлекать одно из другого, что является чем-то вроде взлома, но это работает.