我正在使用 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)
}
}
我知道除了独立更新每个 observableArray 之外,在 Knockout 中必须有更好的方法来处理这种多对多关系。这也导致了一种递归应用程序结构,其中客人有一个标签属性/数组,其中包含一个标签,它有一个客人属性/数组,其中包含一个客人,它有一个标签属性......你明白了。
现在,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 以 DRY 方式更新我的 ViewModel,而不是单独更新标签数组和来宾数组?谢谢!