2013-01-18 12 views
23

अपडेट किया गया है मेरे विचार के हिस्से के रूप कैसे कोड को चलाने के लिए मेरे पास है:के बाद नॉकआउट जेएस डोम

<ul data-bind="foreach: caseStudies"> 
    <li><a data-bind="text: title, attr: { href: caseStudyUrl }"></a></li> 
</ul> 

मैं डोम अपडेट किया गया है एक बार नॉकआउट कुछ 3rd पार्टी कोड चलाना चाहते हैं।

caseStudies(data); 
thirdPartyFuncToDoStuffToCaseStudyLinks(); <-- DOM not updated at this point. 

किसी भी विचार पर मैं सही समय पर इसे कॉल करने के लिए नॉकआउट में कैसे लगा सकता हूं?

+0

आप वास्तव में क्या बदलना चाहते हैं? क्या ये गुण पहले से ही मामले स्टडीज पर मौजूद हैं? – thomaux

+0

मैं कुछ भी बदलना नहीं चाहता हूं, मुझे लिंक में ईवेंट संलग्न करने के लिए किसी तृतीय पक्ष लाइब्रेरी की आवश्यकता है। – Magpie

+0

क्या आप संभवतः हमें एक पहेली प्रदान कर सकते हैं? – thomaux

उत्तर

28

का उपयोग करना afterRender बाध्यकारी आप कर सकते हैं।

<ul data-bind="foreach: { data:caseStudies, afterRender:checkToRunThirdPartyFunction }"> 
    <li><a data-bind="text: title, attr: { href: caseStudyUrl }"></a></li> 
</ul> 


function checkToRunThirdPartyFunction(element, caseStudy) { 
    if(caseStudies.indexOf(caseStudy) == caseStudies().length - 1){ 
     thirdPartyFuncToDoStuffToCaseStudyLinks(); 
    } 
} 
+2

चीयर्स साझा करने के लिए बहुत बहुत धन्यवाद, यही वह था जो मैं – Magpie

+0

के लिए देख रहा था, अगर मैं 'फोरच' के अलावा कुछ और 'विकल्प' की तरह उपयोग कर रहा था तो यह कैसे करें? – AbdelHady

+1

@AbdelHady आप विकल्पों का उपयोग कर सकते हैंअंटर रेन्डर कॉलबैक: http://knockoutjs.com/documentation/options-binding.html – KodeKreachor

12

इस तथ्य का उपयोग करने का एक सटीक तरीका है कि नॉकआउटजेएस अनुक्रमिक रूप से बाइंडिंग लागू करता है (जैसा कि वे HTML में प्रस्तुत किए जाते हैं)। आपको 'foreach-bound' तत्व के बाद वर्चुअल तत्व को परिभाषित करने और 'टेक्स्ट' बाइंडिंग को परिभाषित करने की आवश्यकता है जो आपके तृतीय पक्ष फ़ंक्शन को कॉल करता है।

<ul data-bind="foreach: items"> 
    <li data-bind="text: text"></li> 
</ul> 
<!-- ko text: ThirdParyFunction() --> 
<!-- /ko --> 

यहाँ कोड है::

यहाँ एचटीएमएल है

$(function() { 
     var data = [{ id: 1, text: 'one' }, { id: 2, text: 'two' }, { id: 3, text: 'three' } ]; 

     function ViewModel(data) { 
      var self = this; 
      this.items = ko.observableArray(data); 
     } 

     vm = new ViewModel(data); 
     ko.applyBindings(vm); 
    }); 

    function ThirdParyFunction() { 
     console.log('third party function gets called'); 
     console.log($('li').length); 
    } 
+0

के बाद रेंडर डुप्लिकेट इवेंट ट्रिगर्स का कारण बन रहा था, और इस दृष्टिकोण ने मेरे लिए ठीक काम किया। – misha

+0

दोस्त !! यह बहुत ही बढ़िया था .. – pravin

संबंधित मुद्दे