2012-11-18 7 views
6

कुछ चीज़ें जो मुझे नहीं मिलती हैं। केओ दस्तावेज (और एसओ पर यहां कई पोस्ट) के मुताबिक, अवलोकन करने और लिखने के दौरान ब्रांड्स का उपयोग किया जाना चाहिए। लेकिन जब उप-गुणों को बाध्यकारी लगता है तो मुझे लगता है कि इससे कोई फर्क नहीं पड़ता कि आप ब्रांड्स का उपयोग करते हैं या नहीं।नॉकआउट नेस्टेड ऑब्जेक्ट्स और कोष्ठक

<span data-bind="text: selectedMessage() && selectedMessage().message().subject()"></span> 
<span data-bind="text: selectedMessage() && selectedMessage().message().subject"></span> 

= दोनों सही मूल्य लौटाते हैं।

क्या कोई मुझे बता सकता है कि यह क्यों है?

फिडल: http://jsfiddle.net/viktorb/DKg74/

उत्तर

6

तो बाध्यकारी मूल्य एक मानने योग्य है, को आप के लिए "unwraps" यह है, तो आप नहीं है इसे खुद को कोष्ठक के साथ खोलना होगा (या ko.utils.unwrapObservable को कॉल करें)।

आपके दूसरे उदाहरण में बाध्यकारी मान है: selectedMessage() && selectedMessage().message().subject। जब यह अभिव्यक्ति subject संपत्ति का मूल्यांकन करती है, तो केओ देखता है कि मूल्यांकन मूल्य एक अवलोकन योग्य है, और इसलिए यह आपके लिए इसे खोलता है। (आंतरिक रूप से यह शायद ko.utils.unwrapObservable के लिए सिर्फ एक कॉल है)।

लेकिन, के बाद से अभिव्यक्ति message संपत्ति है, जो मैं कर रहा हूँ संभालने के लिए मूल्यांकन नहीं करता भी एक मानने योग्य है, कि संपत्ति तक पहुँचने के लिए कोष्ठक आवश्यक हैं (जैसे selectedMessage().message.subject काम नहीं होगा)। आपके इनपुट के लिए

+0

आपके इनपुट के लिए धन्यवाद। बहुत उपयोगी। – judehall

4

प्रलेखन की तरह कहते हैं:

observables के पूरे मुद्दे वे मनाया जा सकता है कि, जैसे कि, अन्य कोड कह सकते हैं यह परिवर्तन की सूचना प्राप्त करना चाहता है। यही कारण है कि केओ के अंतर्निर्मित बाइंडिंग आंतरिक रूप से करते हैं। इसलिए, जब आपने डेटा-बाइंड = "टेक्स्ट: व्यक्तित्व" लिखा था, तो पाठ बाध्यकारी स्वयं को अधिसूचित करने के लिए पंजीकृत किया गया था जब व्यक्ति बदलता है (माना जाता है कि यह एक अवलोकन योग्य मान है, जो अब है)।

यह observable होने के बारे में है या नहीं।

पढ़ना देखें और लेखन में अधिक जानकारी के लिए http://knockoutjs.com/documentation/observables.html पर observables।

मैं अपने बेला एक सा है जहाँ आप के साथ और कोष्ठक के बिना अंतर देख सकते हैं संशोधित किया: http://jsfiddle.net/DKg74/1/

+0

Thx। बहुत उपयोगी। – judehall