Ada*_*kis 97 javascript knockout.js
我正在使用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);
}
Run Code Online (Sandbox Code Playgroud)
但到目前为止一切都是假的.
RP *_*yer 154
Knockout包含一个名为的函数ko.isObservable().你可以这样称呼它ko.isObservable(vm[key]).
评论更新:
这是一个确定某个东西是否是一个计算的observable的函数:
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
};
Run Code Online (Sandbox Code Playgroud)
更新:如果您使用的是KO 2.1+ - 那么您可以ko.isComputed直接使用.
Mar*_*son 27
Knockout具有以下功能,我认为这是您正在寻找的:
ko.isObservable(vm[key])
Run Code Online (Sandbox Code Playgroud)