KnockoutJS version 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);
}
しかし、これまでのところ、すべてが間違っています。
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
直接。
Knockoutには次の機能があり、あなたが探しているものだと思います。
ko.isObservable(vm[key])
何かが「サブスクライブ可能」であるかどうかを判断するだけの場合(ほとんどの場合)、RP Niemeyerの答えにたどり着きます。次に ko.isSubscribable
も使用できます。