मुझे बताएं कि आपके उदाहरण में केओ पार्स बाइंडिंग कैसे करें।
वास्तव में डेटा-बाइंड में JSON शामिल है। केओ इसे {} प्रतीकों के साथ लपेटता है और सामान्य जेएस कोड के रूप में मूल्यांकन करता है। अपने उदाहरण KO में मूल्यांकन के बाद इस वस्तु मिल गया:
{
showTip: enableTip,
css: { disabled: !addButtonEnabled }
}
css
bindingHandler नोड बंधन को और bindingAccessor समारोह लागू किया जाना चाहिए प्राप्त करता है।
इस फ़ंक्शन के मूल्यांकन के बाद हमें css
बाइंडिंग के लिए "तर्क" मिलता है। जो वस्तु को
{ disabled: !addButtonEnabled }
फिर इस ऑब्जेक्ट के गुणों के माध्यम से css
bindingHandler दोहराता इसी शैली स्थापित करने के लिए बराबर है। जब disabled
संपत्ति की बात आती है तो हमें इसके लिए मूल्य पढ़ने की आवश्यकता होती है।
आमतौर पर सभी मानक बाइंडिंग इस तरह से मूल्य पढ़ते हैं: ko.utils.unwrapObservable(value)
जो value
देता है यदि value
इस अवलोकन चर में संग्रहीत या मूल्य संग्रहीत नहीं है।
आपके मामले में value = !addButtonEnabled
। जैसा कि आप देख सकते हैं !addButtonEnabled
जावास्क्रिप्ट अभिव्यक्ति है, देखने योग्य नहीं है। तो यह सिर्फ इस अभिव्यक्ति का मूल्यांकन करता है। तो वास्तव में आपका बटन हमेशा observable() != false
के बाद सक्षम है।
आपके दूसरे मामले में मूल्यांकन किए जाने वाले मूल्य में देखने योग्य मूल्य शामिल है, इसलिए यह सही काम करता है।
मुझे लगता है कि आप
बहुत उपयोगी हैं। धन्यवाद! – GRGodoi
मुझे पता है कि यह पुराना है, लेकिन मैं इसे खोज रहा था क्योंकि 'अक्षम: अवलोकन योग्य 1 || अवलोकन करने योग्य 2 को उन अवलोकनों में से किसी एक की आवश्यकता नहीं है, लेकिन मुझे उम्मीद है कि उन्हें आपके उत्तर में दिए गए कारणों के लिए चाहिए - बाइंडिंग जावास्क्रिप्ट अभिव्यक्ति के लिए है, न केवल एक अवलोकन योग्य। – xdumaine