gpt4 book ai didi

knockout.js - 强制运行计算属性函数

转载 作者:行者123 更新时间:2023-12-03 05:15:37 25 4
gpt4 key购买 nike

给定一个计算属性

vm.checkedValueCount = ko.computed(function(){
var observables = getCurrentValues(); //an array of ko.observable[]
return _.filter(observables, function(v) { return v() }).length;
});

假设 getCurrentValues() 可以返回不同的可观察值集,这些可观察值集在代码中的其他位置进行了修改(并且来自比 observableArray 更复杂的结构)。

我需要checkedValueCount随时更新

  • 其依赖项之一发生变化
  • getCurrentValues() 返回一组不同的可观察值。

问题是 ko.compulated 似乎会记住最后返回的值,并且仅在依赖项更新时更新。这处理第一种情况,但不处理后者。

我正在寻找一种强制checkedValueCount重新运行的方法。我可以使用的东西,例如:

changeCurrentValues();
vm.checkeValueCount.recalculate();

最简单地说,鉴于我有

a = ko.computed(function() { return Math.random() })

如何强制调用 a() 两次以返回不同的值。

最佳答案

我意识到我的第一个答案没有捕获你的要点,并且无法解决你的问题。

问题是,只有在存在某些可观察到的情况迫使计算对象重新评估时,计算对象才会重新评估。没有本地方法可以强制计算重新计算。

但是,您可以通过一些技巧来解决这个问题,方法是创建一个虚拟的可观察值,然后告诉其订阅者它已更改。

(function() {

var vm = function() {
var $this = this;

$this.dummy = ko.observable();

$this.curDate = ko.computed(function() {
$this.dummy();
return new Date();
});

$this.recalcCurDate = function() {
$this.dummy.notifySubscribers();
};
};

ko.applyBindings(new vm());

}());​

Here is a Fiddle展示这种方法

关于knockout.js - 强制运行计算属性函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13769481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com