计算的 observable 不更新
Posted
技术标签:
【中文标题】计算的 observable 不更新【英文标题】:Computed observable does not update 【发布时间】:2015-10-02 21:14:12 【问题描述】:我有一个计算出来的 observable,看起来像这样:
this.isActive = ko.computed<boolean>(function ()
this.structure().valueSets();
return this.structure().containsValueSet(this.valueSet());
, this);
this.structure() 是一个 StructureVM 类的实例(我使用的是 TypeScript)。 StructureVM 类中的 containsValueSet 函数如下所示:
containsValueSet(valueSetVM:ValueSetVM):boolean
var valueSet:ValueSetVM = _.find(this.valueSets(), function (valueSet:ValueSetVM)
if (valueSet.id === valueSetVM.id)
return true;
);
return (Objects.isInstantiated(valueSet));
我在 ValueSetVM (this.valueSets()) 列表上使用 _.find。将某些内容添加到 valueSets 数组时,计算值不会得到更新。这是为什么?我假设依赖链有问题?
是因为我使用了下划线吗?
亲切的问候,
DenEwout。
【问题讨论】:
你是如何向数组中添加东西的?您是在实际的observableArray
上还是在底层的原生 javascript 数组上调用 .push
等?
事实证明这正是我的问题,一个愚蠢的错误,我看得太远了。谢谢!
【参考方案1】:
我需要确保在可观察数组上使用 .push,而不是在原生 javascript 数组上使用。举个例子,我应该用这个:
structure().valueSets.push(valueset);
代替:
structure().valueSets().push(valueset);
感谢 James Thorpe 提醒我。
【讨论】:
以上是关于计算的 observable 不更新的主要内容,如果未能解决你的问题,请参考以下文章
在 RxJS Observable 中“展平”数组的最佳方法
RxJS Observables 的 Promise.all 行为?