Knockout JS ObservableArray с отношениями "многие ко многим"
Я создаю приложение со списком гостей, используя Knockout.js, и пока все идет гладко. Однако у меня есть вопрос передового опыта. Мое приложение имеет несколько различных типов объектов: гости и теги среди них. Гости могут иметь несколько тегов, а теги могут иметь несколько гостей. В разных точках приложения мне нужно отображать оба массива по отдельности. Например, у меня есть «Гости» посмотреть, где можно увидеть всех гостей вместе с их ассоциированными тегами, и у меня также есть теги «Теги»; посмотреть, где можно увидеть все теги и связанные с ними гости. В настоящее время код для добавления тега к гостю выглядит примерно так:
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)
}
}
Я знаю, что в Knockout должен быть лучший способ сделать такое соотношение многие ко многим, кроме как обновлять каждый observableArray независимо. Это также приводит к некоторой рекурсивной структуре приложения, в которой у гостя есть свойство / массив тегов, который содержит тег, у которого есть свойство / массив гостя, который содержит гостя, у которого есть свойство тегов ... вы получаете картинку.
Прямо сейчас структура ViewModel выглядит так:
- Parent Object
- Guests ObservableArray
- Guest Object
- Tag Object as property of Guest
- Tags ObservableArray
- Tag Object
- Guest Object as property of Tag
Поэтому я предполагаю, что мой вопрос состоит из двух частей: 1) Есть ли лучший способ структурировать мою ViewModel, чтобы избежать рекурсивных массивов? и 2) как мне лучше использовать Knockout.js для обновления моего ViewModel в СУХОЙ манере, а не для обновления как массива тегов, так и массива гостей по отдельности? Спасибо!