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