it-swarm.com.de

Bestimmen Sie, ob eine Objekteigenschaft ko.observable ist

Ich verwende KnockoutJS Version 2.0.0

Wie kann ich testen, ob jede Eigenschaft ein ko.observable Ist, wenn ich alle Eigenschaften eines Objekts durchlaufe? Folgendes habe ich bisher versucht:

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

Aber bisher ist alles falsch.

97
Adam Rackis

Knockout enthält eine Funktion namens ko.isObservable(). Sie können es wie ko.isObservable(vm[key]) aufrufen.

Update vom Kommentar:

Hier ist eine Funktion, um festzustellen, ob es sich bei etwas um eine berechnete beobachtbare Größe handelt:

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: Wenn Sie KO 2.1+ verwenden, können Sie ko.isComputed direkt.

153
RP Niemeyer

Knockout hat die folgende Funktion, nach der Sie meiner Meinung nach suchen:

ko.isObservable(vm[key])
27
Mark Robinson

Um auf die Antwort von RP Niemeyer einzugehen, wenn Sie lediglich feststellen möchten, ob etwas "abonnierbar" ist (was am häufigsten der Fall ist). Dann ko.isSubscribable ist ebenfalls verfügbar.

3
pim