小编Sea*_*ean的帖子

Knockout JS ObservableArray具有多对多关系

我正在使用Knockout.js创建一个访客列表应用程序,到目前为止,事情正在顺利进行.但是我有一个最佳实践问题.我的应用程序有几种不同类型的对象:其中包含guest和tags.客人可以拥有多个标签,标签可以包含多个客人.在应用程序的不同位置,我需要单独显示两个数组.例如,我有一个"访客"视图,其中可以看到所有访客及其相关标签,我还有一个"标签"视图,其中可以看到所有标签及其关联的客人.目前,我向客户添加标签的代码如下所示:

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)
  }
}
Run Code Online (Sandbox Code Playgroud)

我知道除了独立更新每个observableArray之外,必须有更好的方法在Knockout中进行这种多对多关系.这也导致了一种递归的app结构,其中guest有一个标签属性/数组,其中包含一个标签,该标签包含一个guest属性/数组,其中包含一个guest,它有一个标签属性......你得到了图片.

现在,ViewModel结构如下:

- Parent Object
  - Guests ObservableArray
    - Guest Object
      - Tag Object as property of Guest
  - Tags ObservableArray
    - Tag Object
      - Guest Object as property of Tag
Run Code Online (Sandbox Code Playgroud)

所以我想我的问题是双重的:1)是否有更好的方法来构建我的ViewModel以避免递归数组?2)我怎样才能更好地使用Knockout.js以干燥的方式更新我的ViewModel,而不是单独更新标签数组和来宾数组?谢谢!

javascript mvvm knockout-mapping-plugin knockout.js

4
推荐指数
1
解决办法
2344
查看次数