निर्धारित करें कि क्या कोई ऑब्जेक्ट गुण ko.observable है


98

मैं नॉकआउटJS संस्करण 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

नॉकआउट एक समारोह कहा जाता है शामिल हैं 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??
एडम रैकिस

7
KO 2.1 जो अगले कुछ हफ्तों में बाहर होना चाहिए, एक ko.isComputedफ़ंक्शन शामिल होगा । कोड उस चीज़ के बराबर होगा जो मैंने ऊपर दिए गए उत्तर में जोड़ा था।
आरपी नीमरियर


3

आरपी नीमरियर के जवाब से निपटने के लिए, यदि आप केवल यह निर्धारित करने के लिए देख रहे हैं कि कुछ "सब्सक्राइबेबल" है (जो कि अक्सर होता है)। तब ko.isSubscribableभी उपलब्ध है।


0

मैं उपयोग कर रहा हूँ

ko.utils.unwrapObservable(vm.key)

अद्यतन : 2.3.0 संस्करण के रूप में, के ko.unwrapविकल्प के रूप में जोड़ा गया थाko.utils.unwrapObservable


2
यह एक अवलोकनीय है। यह परीक्षण नहीं करता है कि एक संपत्ति एक अवलोकन योग्य है या नहीं।
एडम रैकिस

1
आप सही हे। लेकिन आमतौर पर अगर आपको वास्तविक अवलोकन योग्य मूल्य जानने की आवश्यकता है;)
इवान रोड्रिगेज

1
यह एक संपत्ति तक पहुंचने का एक वैध तरीका प्रदान करता है जो अवलोकन योग्य हो सकता है या नहीं, लेकिन यह प्रति प्रश्न का उत्तर नहीं देता है।
ओजिल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.