2012-06-12 19 views
26

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

उत्तर

18

अवलोकनों का उपयोग करते समय या किसी अन्य विधि को निष्पादित करते समय आप () नॉकआउट में उपयोग करते हैं। नॉकआउट अवलोकन योग्य कार्य हैं, जो आप चाहते हैं उसे वापस करने के लिए आमंत्रित किए जाते हैं या आपको नए मान निर्दिष्ट करने की अनुमति देते हैं।

नॉकआउट में आप उस संपत्ति को मान निर्दिष्ट करने के लिए object.property(newValue) को पुनर्प्राप्त करने के लिए object.property() का उपयोग करते हैं।

नॉकआउट website पर दस्तावेज़ को चेकआउट करें, विशेष रूप से observables पर अनुभाग, जो आपको () का उपयोग करते समय आपको अवलोकनों को पूछताछ और लिखने का उपयोग करता है।

उद्धृत करने के लिए

:

var myViewModel = { 
    personName: ko.observable('Bob'), 
    personAge: ko.observable(123) 
}; 
  • के नमूदार वर्तमान मूल्य पढ़ने के लिए, बस कोई पैरामीटर के साथ नमूदार कहते हैं। इस उदाहरण में, myViewModel.personName() वापसी 'बॉब', और myViewModel.personAge() वापस आ जाएगी जाएगा 123.

  • नमूदार के लिए एक नया मूल्य लिखने के लिए, नमूदार फोन और एक के रूप में नए मान पास पैरामीटर। उदाहरण के लिए, को कॉल करना myViewModel.personName ('मैरी') नाम मान को 'मैरी' में बदल देगा।

  • मॉडल ऑब्जेक्ट पर एकाधिक अवलोकन योग्य गुणों को मान लिखने के लिए, आप चेनिंग सिंटैक्स का उपयोग कर सकते हैं। उदाहरण के लिए, myViewModel.personName। ('मैरी') व्यक्ति (50) नाम मूल्य के लिए 'मैरी' और 50 वर्ष की आयु मूल्य

नॉकआउट के interactive tutorial भी काफी अच्छा है बदल जाएगा और के माध्यम से जाने लायक है।

3

मूल रूप से जब भी आप एक अवलोकन मूल्य (सरणी या अन्यथा) के साथ काम कर रहे हों तो आपको मूल्य प्राप्त करने के लिए कोष्ठक का उपयोग करना चाहिए और मान सेट करना चाहिए।

var something = ko.obserbable(); 
something(5); //set value 
console.log(something()); //get value: 5 

कारण किया जा रहा है कि ज्यादातर जे एस कार्यान्वयन अभी तक संपत्तियों के लिए getters और setters का समर्थन नहीं करते, इसलिए observables इस तरह लागू किया गया इस सीमा से बचने के लिए।

48

मुझे लगता है कि मौजूदा उत्तरों भ्रम के एक बहुत ही महत्वपूर्ण बिंदु पर छोड़ देते हैं: data-bind विशेषताएँ।

यह सच है कि जब आप जावास्क्रिप्ट में होते हैं तो आप माता-पिता का उपयोग करते हैं, और अवलोकन योग्य या सेटिंग सेट करते हैं। लेकिन जब आप data-bind="text: property" लिख रहे हैं, तो आप अवलोकन के साथ काम करते समय भी माता-पिता छोड़ देते हैं।

संपादित

नीचे टिप्पणी, बाइंडिंग कि भाव, या observbles की पहुँच गुण हैं में बताया गया है, की आवश्यकता होती है कोष्ठक

visible: personName().length > 0 
visible: person().Name().length > 0 
visible: person().isVisible 

ध्यान दें कि पिछले एक person और isVisisble दोनों observables हैं, लेकिन अंतिम संपत्ति माता-पिता का उपयोग नहीं करती है! इसका कारण यह है कि हम एक अवलोकन के बजाय बाध्यकारी के लिए एक मूल्य पारित करेंगे, और यह अद्यतन नहीं होगा।

+5

अच्छा बिंदु, डेटा-बाइंड विशेषता के अंदर एक जावास्क्रिप्ट अभिव्यक्ति का उपयोग किया जाने वाला एकमात्र अपवाद है, जिस स्थिति में ब्रांड्स ** ** आवश्यक हैं, उदा। 'दृश्यमान: व्यक्तिनाम() लंबाई> 0' – benrwb

+0

टिप्पणी आधारित वर्चुअल बाइंडिंग का उपयोग करते समय भी कोष्ठक की आवश्यकता होती है, जैसे:' '। मुझे समझ में नहीं आता कि यह मामला क्यों है, लेकिन 2.3.2 के रूप में, यह सच है। – x0n

+0

एक अभिव्यक्ति में एक अवलोकन योग्य का उपयोग करने के एक और उदाहरण के लिए http://stackoverflow.com/a/11318720/1154642 देखें। – bryanbraun