我正在使用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,而不是单独更新标签数组和来宾数组?谢谢!