Knockout JS ObservableArray z relacjami wiele do wielu

Tworzę aplikację listy gości za pomocą Knockout.js i jak dotąd wszystko idzie płynnie. Mam jednak pytanie dotyczące najlepszych praktyk. Moja aplikacja ma kilka różnych typów obiektów: wśród nich gości i tagi. Goście mogą mieć wiele tagów, a tagi mogą mieć wielu gości. W różnych punktach aplikacji muszę wyświetlać obie tablice osobno. Na przykład mam widok „Goście”, w którym można zobaczyć wszystkich gości wraz z powiązanymi z nimi tagami, a także mam widok „Tagi”, w którym można zobaczyć wszystkie tagi i powiązanych z nimi gości. Obecnie kod do dodania tagu do gościa wygląda mniej więcej tak:

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)
  }
}

Wiem, że w Knockout musi istnieć lepszy sposób na relacje typu wiele do wielu, poza aktualizowaniem każdego observableArray niezależnie. Prowadzi to również do rodzaju rekurencyjnej struktury aplikacji, w której gość ma właściwość / tablicę znaczników, która zawiera znacznik, który ma właściwość gościa / tablicę zawierającą gościa, który ma właściwość znaczników ... otrzymujesz obraz.

W tej chwili struktura ViewModel wygląda tak:

- Parent Object
  - Guests ObservableArray
    - Guest Object
      - Tag Object as property of Guest
  - Tags ObservableArray
    - Tag Object
      - Guest Object as property of Tag

Domyślam się, że moje pytanie jest dwojakie: 1) Czy jest lepszy sposób na strukturę mojego ViewModela, aby uniknąć rekursywnych tablic? oraz 2) w jaki sposób mogę lepiej używać Knockout.js do aktualizacji mojego ViewModel w trybie SUCHYM, zamiast aktualizować zarówno tablicę znaczników ORAZ tablicę gości indywidualnie? Dzięki!

questionAnswers(2)

yourAnswerToTheQuestion