确定对象属性是否为ko.observable
我正在使用KnockoutJS版本2.0.0
如果我遍历一个对象的所有属性,我怎么testing每个属性是否是一个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); }
但迄今为止,一切都是错误的。
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
。
淘汰赛有以下function,我认为是你在找什么:
ko.isObservable(vm[key])
我在用着
ko.utils.unwrapObservable(vm.key)
更新 :从版本2.3.0开始, ko.unwrap
被添加为ko.utils.unwrapObservable