我正在使用KnockoutJS版本2.0.0
如果我循环遍历对象的所有属性,我该如何测试每个属性是否为ko.observable
?这是我到目前为止所尝试的内容:
var vm = {
prop: ko.observable(''),
arr: ko.observableArray([]),
func: ko.computed(function(){
return this.prop + " computed";
}, vm)
};
for (var key in vm) {
console.log(key,
vm[key].constructor === ko.observable,
vm[key] instanceof ko.observable);
}
但到目前为止,一切都是错误的。
答案 0 :(得分:150)
Knockout包含一个名为ko.isObservable()
的函数。您可以将其称为ko.isObservable(vm[key])
。
评论更新:
这是一个确定某个东西是否是计算出的可观测量的函数:
ko.isComputed = function (instance) {
if ((instance === null) || (instance === undefined) || (instance.__ko_proto__ === undefined)) return false;
if (instance.__ko_proto__ === ko.dependentObservable) return true;
return ko.isComputed(instance.__ko_proto__); // Walk the prototype chain
};
更新:如果您使用的是KO 2.1+ - 那么您可以直接使用ko.isComputed
。
答案 1 :(得分:25)
Knockout具有以下功能,我认为您正在寻找:
ko.isObservable(vm[key])
答案 2 :(得分:1)
如果您只是想确定某些内容是否可以订阅,那么要接受RP Niemeyer的答案。" (最常见的情况)。然后ko.isSubscribable
也可用。
答案 3 :(得分:-2)
我正在使用
ko.utils.unwrapObservable(vm.key)
更新:从版本2.3.0开始,添加了ko.unwrap
替代ko.utils.unwrapObservable