给定计算属性
vm.checkedValueCount = ko.computed(function(){
var observables = getCurrentValues(); //an array of ko.observable[]
return _.filter(observables, function(v) { return v() }).length;
});
Run Code Online (Sandbox Code Playgroud)
假设getCurrentValues()可以返回在代码中其他位置修改的不同可观察对象集(并且来自比observableArray更复杂的结构).
我需要checkedValueCount随时更新
问题是,ko.computed似乎记住了最后返回的值,并且只在依赖项更新时才更新.这处理第一种情况,但不处理后者.
我正在寻找的是一种强制checkedValueCount重新运行的方法.我可以使用的东西像:
changeCurrentValues();
vm.checkeValueCount.recalculate();
Run Code Online (Sandbox Code Playgroud)
最简单的说,鉴于我有
a = ko.computed(function() { return Math.random() })
Run Code Online (Sandbox Code Playgroud)
如何强制调用a()两次以返回不同的值.
基本上我有一个observableArray,每个项目的值都不是可观察的.这意味着当我更改项值时,observableArray的foreach循环中的UI不会相应地更新.
如果我必须将它们设置为observable,这意味着一个巨大的变化,那么有没有办法我可以手动刷新UI或observableArray foreach?
具有以下模型:
var dataModel = ko.observable({ someProp: ko.observable() });
var isValid = ko.pureComputed(function () {
return dataModel().isValid;
});
Run Code Online (Sandbox Code Playgroud)
我有以下功能:
function testMe() {
dataModel().isValid = false; // This does not work, why?
console.log("isValid: " + isValid()); // Doesn't update, shows old value
dataModel({ isValid: false }); // This works however I loose all other properties
console.log("isValid: " + isValid()); // Prints correctly updated value
console.log(ko.toJSON(dataModel()));
}
Run Code Online (Sandbox Code Playgroud)
每当我运行testMe()
dataModel.isValid = false
并执行
console.log(“ isValid:” + isValid())
即使我在上面将其设置为false,它仍然设置为“ true”。为什么?我让它起作用的唯一方法是做
dataModel({isValid:false}); 但是,通过这种方式,我失去了模型中的所有其他属性。我该如何进行这项工作?
我究竟做错了什么?