0

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

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

代码示例 [js]:

var ui = 函数 () {

            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 };
        };
4

1 回答 1

1

一个计算值总是会自动更新,因为它是一个Knockout observable。要保持对更新的完全控制:您可以使用正常的 JavaScript 变量,从 Knockout observableswd.height()scale(). 作为一个普通的 JavaScript 变量,你的新变量(比如“ height”)只能在你希望它更新的时候更新。

  • 例如:

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

    }

更新方式:

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

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

    wd.height.subscribe(function(newValue) {
        updateHeight();
    });
    
于 2013-06-10T16:20:42.860 回答