2010-02-19 12 views
6

मूल रूप से मैं इस तरह कुछ करना चाहता हूँ:क्या प्रारंभिक प्रबंधन के लिए कोई अच्छा jQuery पैटर्न है?

$(document).ready(function() { 
    if ($(body).attr("class") === "HomePage") { 
     HomePage.init(); //bind events for home page (Crockford's module pattern) 
    } else if ($(body).attr("class") === "AboutPage") { 
     AboutPage.init(); //bind events for about page 
    } 
}); 

कारण तो मैं, एक जे एस फ़ाइल में सब कुछ कम करें कर सकते हैं इस प्रकार http अनुरोधों की संख्या को कम करने के लिए है। यह समाधान निश्चित रूप से सुरुचिपूर्ण नहीं है, क्योंकि जब भी मैं नए पेज जोड़ता हूं तो मुझे एक और 'अगर' कथन जोड़ना होगा। मैं उपयोग कर सकता था:

$(document).ready(function() { 
    eval($(body).attr("class") + ".init();"); 
}); 

लेकिन eval बुरा है और मुझे इस विधि का उपयोग करके प्रदर्शन प्रभाव नहीं पता है।

+0

मैं भी है कि पता लगाने की कोशिश कर रहा हूँ। मैंने एक संबंधित प्रश्न पूछा जो आपकी मदद कर सकता है: http://stackoverflow.com/questions/2135654/componetizing-jquery-functions-calls-best-practices –

उत्तर

4

eval का उपयोग करने के बजाय जावास्क्रिप्ट ऑब्जेक्ट्स [] पर कॉल करने के अन्य तरीके का उपयोग क्यों न करें?

यह मानते हुए कि अपने सभी वस्तुओं दायरे में वैश्विक हैं, की कोशिश क्यों नहीं:

$(document).ready(function() { 
    window[$(body).attr("class")].init(); 
}); 
0

आप की तरह ..

(function() { 

    var container = { 
     'homePage': function() { 
       // homepage stuff 
     }, 
     'aboutPage': function() { 
     } 
    }, 
    page = $('body').attr('class'); 

    if (page.length && page in container) container[page]() 

})(); 
पाठ्यक्रम आप एक से अधिक वर्ग के नाम उदाहरणों के लिए खाते में कोड जोड़ना होगा की तरह

, और सामान कुछ कर सकते हैं। पृष्ठ के बारे में में पृष्ठ के बारे में के लिए

var views = { 
    'home': function() { 
     // do stuff on homePage 
    }, 
    'about': function() { 
     // some about action 
    } 
} 

var c = document.body.className.split(" "); 
for (var i=0; c[i]; i++) { 
    if (c[i] in views) { 
     views[c[i]].call(this); 
    } 
} 

<body class="home"> <!-- home method will be called --> 
<body class="home about"> <!-- home and about methods will be called --> 
2

यहाँ एक पैटर्न मैं कुछ परियोजनाओं में उपयोग करें फाइल? दूसरे शब्दों में, आप अपने सभी जावास्क्रिप्ट कोड को उसी फ़ाइल में क्यों रखना चाहते हैं? मुझे इसके लिए कोई कारण नहीं दिख रहा है।

1

क्यों नहीं आप घर पृष्ठ फ़ाइल में मुख पृष्ठ के लिए कोड डाल करते हैं, और कोड:

+1

"कारण यह है कि मैं सब कुछ एक जेएस फ़ाइल में छोटा कर सकता हूं, इस प्रकार कम करना http अनुरोधों की संख्या। " – David

+0

पृष्ठ को स्वयं भी किसी भी तरह से भेजा जाना है, इसलिए यह एक अतिरिक्त http अनुरोध उत्पन्न नहीं करेगा क्योंकि जावास्क्रिप्ट कोड HTML कोड के साथ भेजा जाएगा। उदाहरण के लिए google.com होम पेज के स्रोत को देखें –

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