Programing

객체 속성이 ko.observable인지 확인합니다.

lottogame 2020. 8. 23. 09:38
반응형

객체 속성이 ko.observable인지 확인합니다.


내가 사용하고 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
};

업데이트 : KO 2.1+를 사용하는 경우- ko.isComputed직접 사용할 수 있습니다.


Knockout에는 다음과 같은 기능이 있습니다.

ko.isObservable(vm[key])

RP Niemeyer의 대답을 고수하기 위해, 단순히 무언가가 "구독 가능"인지 확인하려는 경우 (가장 자주 발생 함). 그런 다음 ko.isSubscribable도 사용할 수 있습니다.


나는 사용하고있다

ko.utils.unwrapObservable(vm.key)

업데이트 : 버전 2.3.0부터 ko.unwrap대체로 추가되었습니다.ko.utils.unwrapObservable

참고 URL : https://stackoverflow.com/questions/9625591/determine-if-an-object-property-is-ko-observable

반응형