设置新值时,淘汰赛力量将可观察的事件通知订户

亚历山大·阿巴库莫夫(Alexander Abakumov)

假设我们要为可观察对象分配一个新值,并通知订户,无论新值是否等于旧值。

默认情况下,如果新值与旧值相同,Knockout不会通知订阅者,因此我们需要采取一些额外的步骤来实现我们的目标。

我知道有扩展器,currentPage.extend({ notify: 'always' })但是我只需要在特定位置使用该行为,而无需在全局范围内观察即可。

当前,我正在使用以下方法:

    // Some view model property of primitive type
    self.currentPage = ko.observable(1);

    // Some view model method
    self.foo = function (newPage) {
        var currentPageObservable = self.currentPage;

        // Save the old value
        var oldCurrentPageValue = currentPageObservable();

        // Update the observable with a new value
        currentPageObservable(newPage);

        if(oldCurrentPageValue === newPage) {
            // If old and new values are the same - notify subscribers manually
            currentPageObservable.valueHasMutated();
        }
    };

但这看起来可能会更好。

例如,为什么淘汰赛只是不提供一种始终向订户通知可观察对象的新值分配方法?还是我想念这样的人?
您完成相同任务的方法是什么?

马克斯·布罗丁

您的方法足够好,只是您可能要重构它,以便在值更改时不会两次通知订户。

if (oldCurrentPageValue !== newPage) {
   // Update the observable with a new value
   currentPageObservable(newPage);
}
else {
   // If old and new values are the same - notify subscribers manually
   currentPageObservable.valueHasMutated();       
}

在您的情况下currentPageObservable(newPage)通知订户,此后valueHasMutated将第二次通知订户。

另一种方法将扩展ko.observable为特定方法

ko.myObservable = function Observable(initialValue) {
   var result = ko.observable(initialValue);
   result.updateWithNotification = function (newValue) {
      ...
   }
   return result;
}

var o = ko.myObservable();
o.updateWithNotification(newValue);

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

淘汰赛:更改可观察值

来自分类Dev

淘汰赛可观察到的数组,更改事件获得更新的项目值

来自分类Dev

淘汰赛如何设置可观察儿童的价值

来自分类Dev

淘汰赛-如何使用新值重置动态可观察数组

来自分类Dev

分配时淘汰赛可观察数组被覆盖

来自分类Dev

淘汰赛:链接可观察的数组

来自分类Dev

淘汰赛JS:将可观察数组作为参数传递

来自分类Dev

淘汰赛将可观察数组与另一个ViewModel关联

来自分类Dev

浏览器之间可观察到的淘汰赛共享-仅在本地更改值时订阅

来自分类Dev

为什么可观察到的不通知是否阻止了淘汰赛?

来自分类Dev

用FuelUX树订阅可观察到自定义Jquery事件的淘汰赛

来自分类Dev

淘汰赛订阅/事件类型系统没有可观察的?

来自分类Dev

可观察的通知新订户其当前值

来自分类Dev

可观察的通知新订户其当前值

来自分类Dev

淘汰赛-添加了可观察到的未在新对象上更新的功能

来自分类Dev

自动填充表单表单(Norton Identity Safe)未更新“淘汰赛”的可观察值

来自分类Dev

淘汰赛:可观察到,无默认值

来自分类Dev

在淘汰赛js中,单选按钮的可观察值未更改

来自分类Dev

可观察到淘汰赛-为什么此值会自动更新?

来自分类Dev

Html 不通过可观察的淘汰赛显示值。

来自分类Dev

淘汰赛-添加时如何使模板输入与可观察数组保持同步?

来自分类Dev

淘汰赛:在加载时使用 ajax 加载可观察数组

来自分类Dev

淘汰赛可观察的订阅多次触发

来自分类Dev

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

来自分类Dev

淘汰赛计算可观察到的参数

来自分类Dev

淘汰赛可观察到的表演

来自分类Dev

淘汰赛移除率从可观察到的限制

来自分类Dev

淘汰赛订阅可观察的复杂对象的任何更改

来自分类Dev

无法在淘汰赛js中获得可观察的数据

Related 相关文章

  1. 1

    淘汰赛:更改可观察值

  2. 2

    淘汰赛可观察到的数组,更改事件获得更新的项目值

  3. 3

    淘汰赛如何设置可观察儿童的价值

  4. 4

    淘汰赛-如何使用新值重置动态可观察数组

  5. 5

    分配时淘汰赛可观察数组被覆盖

  6. 6

    淘汰赛:链接可观察的数组

  7. 7

    淘汰赛JS:将可观察数组作为参数传递

  8. 8

    淘汰赛将可观察数组与另一个ViewModel关联

  9. 9

    浏览器之间可观察到的淘汰赛共享-仅在本地更改值时订阅

  10. 10

    为什么可观察到的不通知是否阻止了淘汰赛?

  11. 11

    用FuelUX树订阅可观察到自定义Jquery事件的淘汰赛

  12. 12

    淘汰赛订阅/事件类型系统没有可观察的?

  13. 13

    可观察的通知新订户其当前值

  14. 14

    可观察的通知新订户其当前值

  15. 15

    淘汰赛-添加了可观察到的未在新对象上更新的功能

  16. 16

    自动填充表单表单(Norton Identity Safe)未更新“淘汰赛”的可观察值

  17. 17

    淘汰赛:可观察到,无默认值

  18. 18

    在淘汰赛js中,单选按钮的可观察值未更改

  19. 19

    可观察到淘汰赛-为什么此值会自动更新?

  20. 20

    Html 不通过可观察的淘汰赛显示值。

  21. 21

    淘汰赛-添加时如何使模板输入与可观察数组保持同步?

  22. 22

    淘汰赛:在加载时使用 ajax 加载可观察数组

  23. 23

    淘汰赛可观察的订阅多次触发

  24. 24

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

  25. 25

    淘汰赛计算可观察到的参数

  26. 26

    淘汰赛可观察到的表演

  27. 27

    淘汰赛移除率从可观察到的限制

  28. 28

    淘汰赛订阅可观察的复杂对象的任何更改

  29. 29

    无法在淘汰赛js中获得可观察的数据

热门标签

归档