2012-02-09 17 views
6

मेरा ऐप व्यू मॉडल बहुत बड़ा बढ़ रहा है। मैं फ़ाइलों और नामस्थानों में इसे सही तरीके से कैसे विभाजित करूं? क्या मैं दूसरा नेमस्पेस ऑब्जेक्ट बना सकता हूं और दृश्य मॉडल को पैरामीटर के रूप में पास किया जा सकता है?विभाजन को नॉकआउटज

var BALL = {}; 
BALL.roll = function(avm) { // function code }; 
+3

यह उत्तर आपकी मदद कर सकता है: http://stackoverflow.com/questions/8676988/example-of-knockoutjs-pattern-for-multi-view-applications। नॉकआउट में एकाधिक दृश्य मॉडल का उपयोग करने के लिए इसमें तीन विकल्प हैं। –

उत्तर

11

मेरे निजी पसंद मेरी applyBindings कॉल को विभाजित करने और इसके स्थान पर इस से दूर एक भी वैश्विक नामस्थान शाखा के साथ काम नहीं है।

मेरा तर्क यह है कि कई बाइंडिंग सही ढंग से काम करने के लिए और संघर्ष नहीं करने के लिए आपको बहुत सावधान रहने की आवश्यकता है कि आपके चयनित लक्ष्य डोम तत्वों में बदलाव न हो। दुर्भाग्य से मार्कअप में समय के साथ बदलने की एक बुरा आदत है जो आपको बाद में आपके विचारों के साथ परेशानी में डाल सकती है।

मेरी सामान्य दृष्टिकोण है जो मैं एक बहुत बड़ी KO परियोजना पर उपयोग किया है पूरे एप्लिकेशन जैसे myapp

  • अलग फ़ाइलों में अलग कार्यात्मक ब्लॉक विभाजित के लिए

    1. एक वैश्विक शीर्ष स्तर नाम स्थान दिया गया है। आमतौर पर अपने स्वयं के विशिष्ट नामस्थान के साथ। जैसे `myapp.navigation '
    2. यदि विशेष रूप से एक नामस्थान बहुत बड़ा हो जाता है तो इसे आगे के उपनामों में विभाजित किया जाता है या यदि यह उपयुक्त नहीं है तो एकाधिक फ़ाइलों में समान नाम स्थान को विभाजित करें।
    3. प्रदर्शन को संरक्षित करने के लिए अंत में सभी फ़ाइलों को मैश करें।

    कुछ नाम स्थान कोड मैं हाल ही में

    उपयोग कर रहे हैं तो अपने myapp.navigation फ़ाइल में आप

    Namespace("myapp.navigation", function() { 
        var self = this; // your myapp.navigation object 
    
        this.someFunction = function() { 
        }  
    }); 
    

    होता यह सिर्फ करने के लिए एक आत्म प्रेरक फ़ंक्शन का उपयोग कर के लिए आशुलिपि है मैन्युअल रूप से निर्मित नामस्थान में पास करें। यह आपको एक निजी बंद कर देता है और आप अलग-अलग जेएस फ़ाइल में एक ही नामस्थान के साथ एकाधिक नेमस्पेस कॉल का उपयोग करने के लिए स्वतंत्र हैं।

    आपका applyBindings कॉल अब हमेशा

    ko.applyBindings(myapp); 
    

    आशा इस मदद करता है हो सकता है।

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