【发布时间】:2017-09-07 10:57:24
【问题描述】:
我正在使用 KnockoutJS 3.4。
我的视图模型(TypeScript)如下所示:
export class ItemsViewModel {
public currentItem: KnockoutObservable<ItemViewModel>;
public items: KnockoutObservableArray<KnockoutObservable<ItemViewModel>>;
/* snip */
}
ItemViewModel 包含一堆可观察的属性。这些包括Id、Name 和Description。
我希望能够订阅currentItem 中发生的更改。使用 currentItem.subscribe 监视 currentItem 可观察值的变化,而不是当前项目中的属性。我已经看到另一个被建议为重复的问题,但它只是跟踪整个对象的更改 - 我想知道该对象的特定属性何时更改。
我怎样才能以最有效的方式做到这一点?
编辑我已阅读 cmets 和相关问题。它不识别更改的属性。我已更新此问题以反映这一点。
【问题讨论】:
-
如果效率是指开发人员的时间,那么您可以创建一个计算属性,在您的视图模型上调用 ko.toJS。这将为视图模型中的每个可观察对象创建一个依赖项,然后您可以订阅该属性。
-
为了完整起见,使用
ko.toJS,您还可以仅跟踪视图模型某些部分的更改。 -
关于可能的重复问题,如果这个问题是关于效率/速度的,我会在这里注意到 ko.toJS 比 ko.toJSON 性能更高
-
KnockoutObservableArray<KnockoutObservable<ItemViewModel>>为什么要将observables存储在observableArray中?我建议不要这样做。
标签: typescript knockout.js knockout-3.0