【问题标题】:Knockout Avoid ko.computed active listening淘汰赛 避免 ko.computed 主动聆听
【发布时间】:2013-06-06 15:47:43
【问题描述】:

当我将鼠标放在上面时,如何避免高度 [ko.computed] 重复运行? [mouseAreHoverFotoBanner]

当从 ui 读取内容时,所有 ko.computed 都会自动执行...

代码示例[js]:

var ui = function () {

            var fotoBanner = {
                scale: scale,
                scaleIn: function () { scale(0.9); },
                scaleOut: function () { scale(scale(0)); },
                mouseAreHoverFotoBanner: mouseAreHoverFotoBanner,
                enableHoverFotoBanner: function () { ( (mouseAreHoverFotoBanner()) ? "" :mouseAreHoverFotoBanner(true)); },
                disabelHoverFotoBanner: function () { mouseAreHoverFotoBanner(false); },

                url: ko.observable("270829_184226781631642_1559736_n.jpg"),
                height: ko.computed(function () {
                    toastr.info((this.wd.height() * scale()) + "px");//debug
                    return (this.wd.height() * scale()) + "px";
                }, this)
            };

            return { fotoBanner: fotoBanner };
        };

【问题讨论】:

    标签: javascript knockout.js viewmodel observer-pattern


    【解决方案1】:

    计算值总是会自动更新,因为它是Knockout observable。为了保持对更新的完全控制:您可以使用一个普通的 JavaScript 变量,该变量是根据 Knockout observables wd.height()scale() 计算得出的。作为一个普通的 JavaScript 变量,您的新变量(例如“height”)只能在您希望它更新的时间进行更新。

    • 例如:

      var height = (this.wd.height() * scale()) + "px"; var updateHeight = function () {

      }

    更新方式:

    • 写一个setTimeout() 以在您选择的一段时间后更新它。这可以放在一个while循环中,以您选择的时间间隔重复更新。

    • 编写一个更新函数(例如,updateHeight())并在每次 height() 或 scale() 更改时调用它。这可以通过在height()scale() 上放置subscribe() 来完成:

      wd.height.subscribe(function(newValue) {
          updateHeight();
      });
      

    【讨论】:

      猜你喜欢
      • 2014-07-26
      • 2016-03-17
      • 1970-01-01
      • 2016-12-31
      • 2019-06-18
      • 1970-01-01
      • 2015-09-03
      • 1970-01-01
      • 2013-04-10
      相关资源
      最近更新 更多