Knockout JS ObservableArray com muitos-para-muitos relacionamentos
Estou criando um aplicativo de lista de convidados usando o Knockout.js, e até agora as coisas estão indo bem. No entanto, tenho uma questão de melhores práticas. Meu aplicativo tem vários tipos diferentes de objetos: convidados e tags entre eles. Os convidados podem ter várias tags e as tags podem ter vários convidados. Em diferentes pontos do aplicativo, preciso exibir os dois arrays individualmente. Por exemplo, tenho uma visualização "Convidados", na qual é possível ver todos os convidados junto com as tags associadas, além de ter uma visualização "Tags", na qual é possível ver todas as tags e os convidados associados. Atualmente, o código para eu adicionar uma tag a um convidado é algo como isto:
var tag = function(opts) {
this.guests = ko.observableArray()
// Other tag code here...
}
var guest = function(opts) {
this.tags = ko.observableArray()
// Other guest code here...
var self = this
this.addTag = function(tag) {
self.tags.push(tag)
tag.guests.push(self)
}
}
Eu sei que deve haver uma maneira melhor de fazer esse tipo de relacionamento muitos-para-muitos no Knockout além de atualizar cada observableArray independentemente. Isso também leva a um tipo de estrutura de aplicativo recursiva em que um convidado possui uma propriedade / array de tags que contém uma tag, que possui uma propriedade guest / array que contém um guest, que possui uma propriedade tags ... você obtém a imagem.
Agora, a estrutura ViewModel é assim:
- Parent Object
- Guests ObservableArray
- Guest Object
- Tag Object as property of Guest
- Tags ObservableArray
- Tag Object
- Guest Object as property of Tag
Então eu acho que a minha pergunta é dupla: 1) Existe uma maneira melhor de estruturar o meu ViewModel para evitar matrizes recursivas? e 2) como posso usar melhor o Knockout.js para atualizar meu ViewModel de uma maneira DRY, em vez de atualizar tanto a matriz de tags como a matriz de guests individualmente? Obrigado!