给定一个计算属性
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/