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


98

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

그러나 지금까지 모든 것이 거짓입니다.

답변:


157

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직접 사용할 수 있습니다.


2
감사합니다. 관찰 가능 항목이 계산되는지 여부를 우연히 알고 있습니까? 관찰 가능 항목이를 통해 관찰 가능 배열 $.isArray(vm[key]())인지 확인할 수 있지만 관찰 가능 항목을 어떻게 구별 할 수 있는지 알고 계십니까 ko.computed??
Adam Rackis 2012 년

7
앞으로 몇 주 안에 나올 KO 2.1에는 ko.isComputed기능 이 포함될 것 입니다. 코드는 위의 답변에 추가 한 것과 동일합니다.
RP Niemeyer


3

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


0

나는 사용하고있다

ko.utils.unwrapObservable(vm.key)

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


2
그것은 관찰 가능한 것을 풀어줍니다. 속성이 관찰 가능한지 여부는 테스트하지 않습니다.
Adam Rackis 2014-07-29

1
네가 옳아. 그러나 당신이 필요로하는 일반적 경우 실제 관측 값을 얻기 위해 알고)
이반 로드리게스에게

1
관찰 할 수 있거나 관찰 할 수없는 속성에 액세스 할 수있는 유효한 방법을 제공하지만 질문 자체에 대한 답은 아닙니다.
Ozil
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.