मुझे नहीं पता कि यह घोंसला सही है या नहीं? लेकिन मुझे पता है कि एक दूसरे के अंदर कई काम करने के लिए यह एक अच्छा कोड नहीं है। अधिकांश jQuery विधियों में कॉलबैक फ़ंक्शन होता है जिसे हम वहां पर कॉलबैक डाल सकते हैं। लेकिन जब हम किसी अन्य कॉलबैक के अंदर कॉलबैक करते हैं और इसे जारी रखते हैं और गहरे और गहरे होते हैं तो ऐसा लगता है कि कोड कम पठनीय हो सकता है और शायद कम डिबगबल हो सकता है।jQuery कोड को बहुत अधिक घोंसले कार्यों से कैसे रोकें?
उदाहरण के लिए यदि मैं एक दूसरे के बाद कुछ एनिमेशन करना चाहता हूं तो मुझे प्रत्येक एनीमेशन को कॉल करना होगा जिसे मैं कॉलबैक फ़ंक्शन में किसी अन्य के बाद आना चाहता हूं। यह कॉलबैक फ़ंक्शन में गहरा और गहरा होगा। एक 5 चरणों एनीमेशन मैं एक 5 स्तर कॉल स्टैक करना है करने के लिए
$('#t').animate({height: 400}, 500, function(){
$(this).animate({height: 200}, 500, function(){
$(this).animate({width: 300}, 500, function(){
$(this).animate({height: 300}, 500, function(){
$(this).animate({'border-radius': '50px'}, 500, function(){
//and so on...
});
});
});
});
});
: इस उदाहरण (fiddle) को देखो। तो मेरा सवाल यह है कि आप इससे कैसे बचते हैं? मुझे अपने नोड.जेएस कार्यों में भी एक ही समस्या थी।
अद्यतन: मुझे पता है कि jQuery फ़ंक्शन में चिनिंग सुविधा है लेकिन यह समस्या का समाधान नहीं करती है। क्योंकि आप श्रृंखला के बीच में कुछ नहीं कर सकते हैं। आप $(selector').animate().animate()...
की तरह कोड के ऊपर लिख सकता है, लेकिन आप इस के लिए एक ही नहीं कर सकते:
$(selector).doQ(anim1, anim2, myfunc1, anim3, myfunc2)...
लेकिन दुर्भाग्य से jQuery एक API की जरूरत नहीं है:
$('#t').animate({height: 400}, 500, function(){
console.log('step 1 done: like a boss');
$(this).animate({height: 200}, 500, function(){
console.log('step 2 done: like a boss');
$(this).animate({width: 300}, 500, function(){
console.log('step 3 done: like a boss');
$(this).animate({height: 300}, 500, function(){
console.log('step 4 done: like a boss');
$(this).animate({'border-radius': '50px'}, 500, function(){
//and so on...
});
});
});
});
});
आदर्श समाधान इस तरह एक कोड होगा इस तरह (मेरे ज्ञान के लिए)।
मुझे नहीं लगता कि इस तरह घोंसले के कार्यों में कोई समस्या है। – Nathan
@ नाथन: वास्तव में? उस गहरे घोंसले वाले कोड को डिबगिंग, रखरखाव और पढ़ने का प्रयास करें। –
@ एंड्रयू मेरा मतलब है कि मुझे लगता है कि यह काम करेगा। मैंने सोचा कि वह पूछ रहा था कि यह उचित है या नहीं। और हां, डीबग करना, पढ़ना और बनाए रखना बहुत मुश्किल है। – Nathan