2013-07-09 7 views
13

प्रतिपादन मेरी कोड में मैं सिर्फ बाद KnockoutJS foreach बाध्यकारी सभी आइटमknockoutJS कॉलबैक पर अमल foreach के बाद

मुझे पता है कि अगर मैं पिछले पर कर रहा हूँ मैं बस की जांच करके ऐसा कर सकते प्रतिपादन खत्म समारोह या कॉलबैक पर अमल करना चाहते हैं खत्म तत्व (मैंने पाया कि यहां execute code after the last item has been rendered)।
लेकिन इसका उपयोग करके मेरे कॉलबैक फ़ंक्शन को प्रत्येक बार एक नया तत्व या रिकॉर्ड प्रदान किया जाएगा।

मैं केवल एक बार (प्रदर्शन के लिए) अपना कॉलबैक फ़ंक्शन निष्पादित करना चाहता हूं।

अद्यतन

एक और समाधान यहाँ success callback after knockout.js finishes rendering all the elements है। लेकिन फिर से इस कॉलबैक फ़ंक्शन का उपयोग करके प्रत्येक बार एक नया तत्व प्रस्तुत किया जाएगा।

+1

आप इस प्रश्न की जाँच की है http://stackoverflow.com/questions/14254317/success:

यहां एक नमूना है कि observbaleArray के प्रत्येक परिवर्तन पर जब भी एक बार observableArray में प्रत्येक तत्व की पृष्ठभूमि का रंग randomizes है -callback के बाद नॉकआउट-js-खत्म-रेंडरिंग-अखिल-तत्वों? RQ = 1? – nemesv

+0

यह वही है, ** ** रेंडर ** का उपयोग करके कॉलबैक फ़ंक्शन निष्पादित किया जाएगा प्रत्येक आइटम –

+0

प्रदान किया जाता है यदि अंतिम तत्व होने की जांच हैंडलर में पहली बात है, तो यह बुरी तरह से निष्पादित नहीं करेगा। – Tyrsius

उत्तर

21

मुझे लगता है कि इस प्रकार के मुद्दे के लिए एक अच्छा समाधान एक कस्टम बाध्यकारी का उपयोग करना है। अपनी ही गणना नमूदार के अंदर और KO 3.0 में

<ul data-bind="foreach: items, doSomething: items"> 
    <li>...</li> 
</ul> 

doSomething जरूरतों items की अपनी निर्भरता को आकर्षित करने foreach अद्यतन के रूप में,:

ko.bindingHandlers.doSomething = { 
    update: function(element, valueAccessor) { 
     ko.utils.unwrapObservable(valueAccessor()); //grab a dependency to the obs array 

     //do something based on "element" (the container) 
    } 
} 

आप इसे पसंद का प्रयोग करेंगे: यह की तरह कुछ होगा बाइंडिंग स्वतंत्र होगी। आप doSomething पर विकल्प भी पास कर सकते हैं और फिर allBindingsAccessor().foreach (तीसरा तर्क) के माध्यम से अवलोकन योग्य ऐरे तक पहुंच करके निर्भरता प्राप्त कर सकते हैं, यदि आप हमेशा इसे foreach के साथ जोड़ते हैं। http://jsfiddle.net/rniemeyer/SCqaS/

+0

क्षमा करें मुझे यह पूरी तरह से नहीं मिला है, ** कुछ कैसे ** ** वस्तुओं पर निर्भर करता है, या परिवर्तन क्या है जिसे इसे बुलाया जाता है? –

+0

केओ में, बाइंडिंग एक गणना किए गए अवलोकन के अंदर लागू की जाती हैं। कोई भी वेदृश्य जो उनके मूल्य तक पहुंचता है निर्भरता बनाते हैं। इस मामले में 'ko.utils.unwrapObservable (valueAccessor()) को कॉल करके, हम एक निर्भरता बना रहे हैं, यदि मान पास किया गया तो एक अवलोकन/अवलोकन योग्य था। इसलिए, जब भी यह देखने योग्य अपडेट किया जाता है, तो यह कोड फिर से चलाया जाएगा। उम्मीद है की वो मदद करदे। –

+0

बहुत अच्छा..एक और सवाल है कि कैसे ** foreach ** आइटम सरणी बदलने जा रहा है? मुझे लगता है कि यह सिर्फ आइटम मूल्यों को पढ़ा है! –

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