计算的 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 不更新的主要内容,如果未能解决你的问题,请参考以下文章

观察 Vue Observable 的变化

Rxjava2 Observable的创建详解及实例

在 RxJS Observable 中“展平”数组的最佳方法

RxJS Observables 的 Promise.all 行为?

为啥我的 ko 计算 observable 在其值更改时不会更新绑定的 UI 元素?

RxSwift 对 Observable 的扩展,其中 Element 是 Result<>