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 в СУХОЙ манере, а не для обновления как массива тегов, так и массива гостей по отдельности? Спасибо!

Ответы на вопрос(2)

Ваш ответ на вопрос