1. ホーム
  2. javascript

[解決済み] オブジェクトのプロパティがko.observableであるかどうかを判断する

2023-01-01 05:24:39

質問

私は KnockoutJS バージョン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
};

UPDATE: KO 2.1+ を使用している場合 - その場合、以下のようになります。 ko.isComputed を直接使うことができます。