计算出的剔除会创建可写但未读的可观察对象的依赖关系

多玛

我在“小部件”中有此代码。值是小部件的值,其他是应用程序其他位置的数据源。即使从未读取过,计算所得的值也会创建一个值的订阅。这意味着当我更新值时,将运行comp并将值重新设置为其他值。

value = ko.observable(1); // Widgets value
other = ko.observable('a'); // Somewhere else in app

comp = ko.computed(function () {
    value(other());
    doSomeThingElse();
});

value(2);
// comp is run
value() === 'a'; // true

基本上,我需要comp仅在其他更改时才能运行。我看到现在有一​​个偷看功能,但这仅用于读取。为什么计算式甚至为从未读过的可观察项创建订阅?这非常令人沮丧。有没有办法解决?

comp函数用于小部件上以从外部源设置其数据,小部件的实际布局为:

new Widget({
    id: 'widget',
    initial: 5,
    observables: {
        data: function () {
            var data = client.get('data'); // observable
            this.value(data);
            this.color(data.length ? 'red' : 'green');
        }
    }
})

创建窗口小部件时,它将根据observables.data进行新的计算。我们希望保留此简单的api,而无需进行手动订阅,这会使小部件变得复杂。

编辑:问题实际上是我的代码有一个错误,以上示例被简化,但实际上消除了该问题。如果对http://jsfiddle.net/dominata/hu6Fr/感兴趣,请参阅此小提琴

考虑之后,我们将使用此模型,而不是纯粹出于副作用而使用计算。我同意这更多是打算使用它们的方式。

new Widget({
    id: 'widget',
    initial: 5,
    value: function () {
        return client.get('data');
    },
    color: function () {
        return client.get('data').length ? 'red' : 'green';
    }
})
RP尼迈耶

value在您的计算中设置不会创建订阅。您将订阅other唯一的问题是,如果您value作为的一部分进行访问doSomethingElse

这是一个小提琴,它表明最初对计算值进行了评估,但在更新后未进行评估valuehttp : //jsfiddle.net/rniemeyer/exV92/

我同意@nemesv,您可能要在计算中设置可观察值时要小心。您当前的情况应该可以正常工作(除非在中进行操作doSomethingElse)。

另一种选择是使用手动订阅。如果只想valueother更改进行更新,则可以执行以下操作:

other.subscribe(function(newValue) {
    value(newValue);
    doSomethingElse();
});

使用手动订阅,它将仅在特定的可观察到的更改时触发,因此您不必担心要访问哪些依赖项。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

更改计算的依赖项时,计算出的可观察的敲除不更新值

来自分类Dev

KnockoutJS-根据计算出的可观察对象的输出设置选择列表的初始值

来自分类Dev

淘汰赛:找出计算出的可观察触发

来自分类Dev

获取计算的可观察依赖关系

来自分类Dev

使用可观察数组计算出的淘汰赛未更新

来自分类Dev

通过访问observableArray计算出可观察到的淘汰赛

来自分类Dev

如何从所有消息的可观察对象创建未读消息的可观察对象

来自分类Dev

Ember的“观察”会引发断言错误,而计算出的属性不会吗?

来自分类Dev

如果观察到两条变化的依赖路径,则敲除计算出的单个动作多次触发

来自分类Dev

KnockoutJS-计算的可写可观察对象无法正确更新绑定

来自分类Dev

从ajax更改视图模型时,计算出的剔除未更新

来自分类Dev

围绕一组不断变化的依赖可观察对象创建一个可观察对象

来自分类Dev

剔除动态替换可观察数组中的对象

来自分类Dev

从可观察数组中剔除访问对象的值

来自分类Dev

根据JSON响应创建可观察的基因剔除数组

来自分类Dev

如何从可观察对象数组创建可观察对象数组?

来自分类Dev

计算出现次数

来自分类Dev

当函数更新计算中使用的可观察数组时,剔除计算数组未更新

来自分类Dev

创建事件循环的可观察对象

来自分类Dev

如何从pubnub订阅创建可观察对象

来自分类Dev

如何创建单例可观察对象?

来自分类Dev

如何列出因果关系计算出来的

来自分类Dev

带有可观察到的可观察数据的计算会浪费计算时间

来自分类Dev

是否在层上添加前向钩子以确保使用该层的输出计算出的损耗梯度会自动计算出来?

来自分类Dev

如何在剔除js中绑定可观察的可观察的

来自分类Dev

如果更改可观察对象,异步管道是否会自动取消订阅可观察对象?

来自分类Dev

可观察阵列的剔除过滤

来自分类Dev

可观察数组中的基因剔除搜索

来自分类Dev

剔除JS设置从可观察数组对象属性值下拉的初始值

Related 相关文章

  1. 1

    更改计算的依赖项时,计算出的可观察的敲除不更新值

  2. 2

    KnockoutJS-根据计算出的可观察对象的输出设置选择列表的初始值

  3. 3

    淘汰赛:找出计算出的可观察触发

  4. 4

    获取计算的可观察依赖关系

  5. 5

    使用可观察数组计算出的淘汰赛未更新

  6. 6

    通过访问observableArray计算出可观察到的淘汰赛

  7. 7

    如何从所有消息的可观察对象创建未读消息的可观察对象

  8. 8

    Ember的“观察”会引发断言错误,而计算出的属性不会吗?

  9. 9

    如果观察到两条变化的依赖路径,则敲除计算出的单个动作多次触发

  10. 10

    KnockoutJS-计算的可写可观察对象无法正确更新绑定

  11. 11

    从ajax更改视图模型时,计算出的剔除未更新

  12. 12

    围绕一组不断变化的依赖可观察对象创建一个可观察对象

  13. 13

    剔除动态替换可观察数组中的对象

  14. 14

    从可观察数组中剔除访问对象的值

  15. 15

    根据JSON响应创建可观察的基因剔除数组

  16. 16

    如何从可观察对象数组创建可观察对象数组?

  17. 17

    计算出现次数

  18. 18

    当函数更新计算中使用的可观察数组时,剔除计算数组未更新

  19. 19

    创建事件循环的可观察对象

  20. 20

    如何从pubnub订阅创建可观察对象

  21. 21

    如何创建单例可观察对象?

  22. 22

    如何列出因果关系计算出来的

  23. 23

    带有可观察到的可观察数据的计算会浪费计算时间

  24. 24

    是否在层上添加前向钩子以确保使用该层的输出计算出的损耗梯度会自动计算出来?

  25. 25

    如何在剔除js中绑定可观察的可观察的

  26. 26

    如果更改可观察对象,异步管道是否会自动取消订阅可观察对象?

  27. 27

    可观察阵列的剔除过滤

  28. 28

    可观察数组中的基因剔除搜索

  29. 29

    剔除JS设置从可观察数组对象属性值下拉的初始值

热门标签

归档