J'utilise KnockoutJS version 2.0.0
Si je parcoure toutes les propriétés d'un objet, comment puis-je vérifier si chaque propriété est un ko.observable
? Voici ce que j'ai essayé jusqu'à présent:
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);
}
Mais jusqu'à présent, tout est faux.
Knockout inclut une fonction appelée ko.isObservable()
. Vous pouvez l'appeler comme ko.isObservable(vm[key])
.
Mise à jour du commentaire:
Voici une fonction pour déterminer si quelque chose est une observable calculée:
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
};
UPDATE: Si vous utilisez KO 2.1+ - vous pouvez utiliser ko.isComputed
directement.
Knockout a la fonction suivante, que je pense être ce que vous recherchez:
ko.isObservable(vm[key])
Pour continuer sur la réponse de RP Niemeyer, si vous cherchez simplement à déterminer si quelque chose est "abonné" (ce qui est le plus souvent le cas). Ensuite ko.isSubscribable
est également disponible.