Knockout避免ko.computed主动聆听

时间:2013-06-06 15:47:43

标签: javascript knockout.js viewmodel observer-pattern

当我把鼠标放在上面时,如何避免高度[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 };
        };

1 个答案:

答案 0 :(得分:1)

计算将始终自动更新,因为它是Knockout observable。要保持对更新的完全控制:您可以使用从Knockout observables wd.height()scale()计算的普通JavaScript变量。作为普通的JavaScript变量,您的新变量(例如“height”)只能在您希望更新时更新。

  • 例如:

      

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

         

    }

更新方法:

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

  • 编写更新函数(比如updateHeight())并在每次height()或scale()更改时调用它。这可以通过在subscribe()height()上添加scale()来完成:

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