97 votes

Déterminer si une propriété d'objet est ko.observable

J'utilise KnockoutJS version 2.0.0

Si je parcours 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.

154voto

RP Niemeyer Points 81663

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
};
 

MISE À JOUR: Si vous utilisez KO 2.1+ - vous pouvez utiliser ko.isComputed directement.

27voto

Mark Robinson Points 5893

Knockout a la fonction suivante, et je pense être ce que vous recherchez:

 ko.isObservable(vm[key])
 

0voto

Ivan Rodriguez Points 58

j'utilise

 ko.utils.unwrapObservable(vm.key)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X