2013-02-25 46 views
13

नीचे कोड के साथ, इनपुट # p_in इनपुट # s_in के परिवर्तन के साथ अपडेट किया जाएगा। लेकिन मैंने क्लीननोड (सेकंड) का उपयोग किया है। क्या कोई यह समझने में मदद कर सकता है कि बाध्यकारी क्यों साफ़ नहीं किया गया है।क्या सफाई नोड() बाध्यकारी को साफ करने के लिए उपयोग किया जा सकता है?

<input id="p_in" data-bind="value: name"></input> 
    <input id="s_in" data-bind="value: name"></input> 
    <input id="cb" type="checkbox">same</input> 

    <script type="text/javascript"> 
     function AddrDataSet (name) { 
      this.name = ko.observable(name); 
     }; 

     var primary_set = new AddrDataSet('p'); 
     var sec_set = new AddrDataSet('s'); 
     var pri = $('#p_in')[0]; 
     var sec = $('#s_in')[0]; 

     ko.applyBindings(primary_set, pri); 
     ko.applyBindings(sec_set, sec); 

     ko.cleanNode(sec); // clean it 
     ko.applyBindings(primary_set, sec); // bind it to primary_set 
     ko.cleanNode(sec); // clean it again 

    </script> 

उत्तर

29

ko.cleanNode आंतरिक रूप से नॉकआउट द्वारा तत्व/सामग्री से संबंधित डेटा/कंप्यूटेट को साफ करने के लिए आंतरिक रूप से उपयोग किया जाता है। यह बाइंडिंग द्वारा जोड़े गए किसी भी ईवेंट हैंडलर को नहीं हटाता है या आवश्यक रूप से समझता है कि बाध्यकारी डीओएम में बदल गया है या नहीं। यह निश्चित रूप से किसी तत्व से जुड़े एकाधिक हैंडलर होने जैसी समस्याओं का कारण बन सकता है जब इसे बाद में बाध्य किया जाता है।

तो, मैं इस पैटर्न का उपयोग करने की अनुशंसा नहीं करता। with या template एक सेक्शन के आसपास बाध्यकारी का उपयोग करने के लिए एक बेहतर पैटर्न है और इसे नए बाइंडिंग के साथ फिर से प्रस्तुत करने की अनुमति है।

+0

क्लीननोड वास्तव में एक आंतरिक एपीआई है। वर्तमान में इस पर विशेष रूप से दस्तावेज़ नहीं हैं। –

+14

@RPNiemeyer क्या आप विस्तार से बता सकते हैं कि "साथ" कीवर्ड इस समस्या को कैसे हल कर सकता है? मैं एक समान स्थिति में हूं, और एक उप-मोडल विंडो खोला/बंद है और मुझे कई बार बाइंडिंग लागू करने से बचने की आवश्यकता है .. –

+1

बाइंडिंग या घटकों का परीक्षण करते समय मुझे मिला एक वैध उपयोग केस है। मेरे बाद प्रत्येक कार्य बाध्यकारी के लिए परीक्षण सेटअप युक्त तत्व को साफ़ करता है, फिर इसे भूलने के लिए क्लीन नोड चलाता है। फिर मैं अगले से पहले शुरू कर सकता हूं, परीक्षण के लिए बाध्यकारी सेट अप कर रहा हूं। इस तरह मैंने पूरी तरह से encapsulated परीक्षण किया है। –

1

स्वीकार करने के लिए मिल गया है, मैं यह works for me के रूप में एक छोटे से उलझन में हूँ,! आप क्या देख रहे हैं, और आप वास्तव में क्या देखने की उम्मीद कर रहे हैं?

वह कोड value p के साथ दो इनपुट दिखाएगा, जो मैं अपेक्षा करता हूं।

+0

उत्तर के लिए धन्यवाद। मूल रूप से, मैं उम्मीद करता हूं कि क्लीन नोड पूरी तरह से बाध्यकारी संबंधित डेटा (ईवेंट हैंडलर समेत) को साफ़ कर देगा ताकि मैं आसानी से viewModels के बीच एक तत्व के बाध्यकारी स्विच कर सकूं। असल में, मैं एक तत्व से बंधे दो व्यूमोडल्स के स्विच को नियंत्रित करने के लिए एक चेकबॉक्स का उपयोग करना चाहता था। – rxing

+0

मैं देख रहा था कि इनपुट # s_in बदलने के बाद, इनपुट # p_in का मान भी अपडेट किया जाएगा। यह वही नहीं है जो मैं शुरुआत में उम्मीद करूंगा। – rxing