2010-04-04 8 views
44

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

एप्लिकेशन में प्रत्येक दृश्य के लिए केवल लंबी प्रक्रियात्मक फाइलें बनाना बहुत आसान हो रहा है। क्या कोई तरीका है कि मैं एमवीसी, या परियोजना के लिए कुछ संरचना शामिल कर सकता हूं?

धन्यवाद, मैं इसकी सराहना करता हूं। -Tilo

+0

महान प्रश्न। –

+3

हालांकि सवाल प्रासंगिक रहता है, ध्यान दें कि कुछ उत्तरों पुराने हो रहे हैं: अब तक कुछ पैटर्न जो ट्यूटोरियल्स और आधिकारिक दस्तावेज़ों में उल्लिखित हैं - यहां तक ​​कि पुराने पुराने नमूना ऐप किचनसिंक (चूहे के घोंसले के उर्फ ​​राजा) को भी दोबारा संशोधित किया गया है वर्तमान अच्छे अभ्यास को बेहतर ढंग से प्रतिबिंबित करने के लिए। @jhaynie, मैं बयान के साथ का तर्क था कि टाइटेनियम ही अनिवार्य रूप से MVC है: – conny

उत्तर

31

टाइटेनियम स्वयं अनिवार्य रूप से एमवीसी दिया गया है कि आपकी app.js फ़ाइल मुख्य नियंत्रक है और आपके द्वारा बनाए गए प्रत्येक दृश्य दृश्य है और आप दृश्य के विरुद्ध मॉडल डेटा पास (या सेट) करते हैं।

टाइटेनियम में, आप अच्छा में निर्मित तंत्र की एक जोड़ी का उपयोग कर अपने आवेदन विघटित कर सकते हैं:

  1. Titanium.include - Titanium.include आप बहुत सी #include की तरह जगह में एक या अधिक जे एस फ़ाइलों को शामिल करने की अनुमति देता है संकलक निर्देश। आप इस फ़ाइल में सामान्य कार्यों और जेएस कक्षाएं डाल सकते हैं और फिर उन्हें शामिल कर सकते हैं जहां आप उन्हें आयात और उपलब्ध करना चाहते हैं।

  2. Titanium.UI.createWindow - आप किसी अन्य जेएस संदर्भ में एक यूआरएल में नए विंडो पास की संपत्ति के रूप में एक नया दृश्य बना सकते हैं जो एक नया जेएस उप-संदर्भ बनाएगा और आपको अपनी वैरिएबल स्पेस बनाए रखने की अनुमति देगा (लेकिन फिर भी आपको अपने माता-पिता को वापस पहुंच प्रदान करें)।

इसके अलावा, टाइटेनियम में, आप फ़ोल्डरों को तार्किक रूप से एक तरह से आप और आपके आवेदन के लिए उपयुक्त है कि में अपने आवेदन को व्यवस्थित करने के लिए अनुमति देते हैं बना सकते हैं।

संपादित करें: आज, टाइटेनियम। शामिल विधि को बहिष्कृत किया गया है। जैसा कि प्रलेखन में उल्लेख किया गया है, हमें एक कॉमनजेएस मॉड्यूल बनाना चाहिए और require() कथन का उपयोग करना चाहिए। इस बयान के बारे में

अधिक जानकारी: Require

अधिक मॉड्यूल के बारे में जानकारी: Modules

+0

मैं बयान कि –

+2

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

6

यह भी मदद मिल सकती है: जैसा कि मैंने था https://github.com/krawaller/Struct

+2

यहां एक सहायक [ब्लॉग पोस्ट] (http://blog.krawaller.se/titanium-plication- संरचना-learning-from) है जो बताता है कि उस गिटहब रेपो में क्या हो रहा है। – philoye

24

: कैसे एक टाइटेनियम मोबाइल परियोजना को व्यवस्थित करने का एक बुनियादी struct टाइटेनियम मोबाइल प्रोजेक्ट के लिए उचित एमवीसी समाधान नहीं ढूंढ रहा, मैं निम्नलिखित दृष्टिकोण के साथ आया। छोटे ऐप्स के लिए यह अधिक इंजीनियर हो सकता है लेकिन बढ़ते अनुप्रयोगों को बनाए रखने में मदद कर सकता है।

फ़ोल्डर संरचना:

/Resources 
    /model 
    /view 
    /controller 
    /ui 
    /iphone 
    /android 
    app.js 
    app.jss 

अलग विचारों, मॉडल और नियंत्रकों एक नाम स्थान की जरूरत है के लिए, तो हम जो हमारे मुख्य नियंत्रक है app.js में परिभाषित,:

var app = { 
    view: {}, 
    controller: {}, 
    model: {}, 
    ui: {} 
} 

के भीतर फ़ोल्डर्स हम प्रत्येक घटक के लिए एकल जावास्क्रिप्ट फाइलें डालते हैं। इसके लिए हम या तो हल्के जावास्क्रिप्ट ओओपी लाइब्रेरी का उपयोग कर सकते हैं, जैसे कि म्यूटूल या प्रोटोटाइप या हमारे ऑब्जेक्ट्स के रूप में सरल जेएस फ़ंक्शंस को परिभाषित करें। यदि आप मूल कक्षाओं से भी उत्तराधिकारी बनना चाहते हैं, तो पुस्तकालय निश्चित रूप से समझ में आता है।

उदाहरण:

# Resources/controller/MyController.js 
app.controller.MyController = function() { 
    return { 
     getView: function() { 
     return new app.view.MyView().getView(); 
     } 
    } 
} 

# Resources/view/MyView.js 
app.view.MyView = function() { 
    return { 
     getView: function() { 
     return Ti.UI.createWindow({...}); 
     } 
    } 
} 

# Resources/view/MyModel.js 
app.model.MyModel = function() { 
    return { 
     some: "data", 
     foo: "bar" 
    } 
} 

उसके बाद हम Ti.include() app.js फ़ाइल में साथ सभी आवश्यक मॉडल/देखें/नियंत्रक वर्ग शामिल हैं और हमारे नाम स्थान के साथ घटकों देख सकते हैं:

Ti.include("controller/MyController.js"); 
Ti.include("view/MyView.js"); 
var myController = new app.controller.MyController(); 
var myView = myController.getView(); 
myView.open(); 

एमवीसी दृष्टिकोण अब यह मान लेगा कि नियंत्रक दृश्य की स्थिति को नियंत्रित करता है और मॉडल से डेटा को दृश्य में पास करता है। दृश्य में केवल यूआई तत्वों और स्टाइल के लिए गुण होते हैं। यूआई में बनाई गई कोई भी क्रिया एक घटना को आग लगती है, जो नियंत्रक को वांछित कार्रवाई करने के लिए कहती है।

लेकिन ज़ाहिर है, MVC की सटीक परिभाषा अपने व्यक्तिगत स्वाद के अनुसार अलग हो सकता है;)

+0

आपके समाधान की तरह। यह वही तरीका किया और अच्छे अनुभव किए हैं। – mkind

+0

इसे बहुत पसंद है और वास्तव में इसका उपयोग करना पसंद करेंगे। मैं अपने ऐप में इसका उपयोग कैसे कर सकता हूं? –

+0

मुझे यह पसंद है। क्या 2014 गैर-मिश्र धातु संस्करण केवल Ti.include() के बजाय आवश्यकता() के उपयोग से भिन्न होगा? –

3

मुझे इस सवाल का अद्यतन करने के लिए के बाद से प्रतिक्रियाओं का सबसे अधिक्रमित कर रहे हैं की अनुमति दें। क्यू 4 2012 में, एपसेलरेटर ने नवीनतम आईडीई और एसडीके रिलीज, टाइटेनियम स्टूडियो 3.0 और एसडीके 3.0 के साथ मिश्र धातु एमवीसी (बीटा) फ्रेमवर्क जारी किया। मिश्र धातु पूरी तरह से स्टूडियो के साथ एकीकृत है, इसलिए 15 मिनट से भी कम समय में एक बुनियादी ऐप चलाने में काफी आसान है। मिश्र धातु एक महत्वपूर्ण फ़ोल्डर पुनर्गठन पेश करता है: /ऐप फ़ोल्डर अब है जहां सभी विकास कोड रहते हैं।

/संसाधन फ़ोल्डर, जहां कोड रहते थे, अब का अद्यतन बराबर/ फ़ोल्डर का निर्माण होता है। संकलित कोड /संसाधन प्रत्येक निर्माण पर अधिलेखित है।

मैंने मिश्र धातु परियोजना बनाने पर एक लघु प्रारंभिक प्राइमर (स्क्रीनकास्ट) बनाया। आप इसे मेरे ड्रॉपबॉक्स फ़ोल्डर के माध्यम से देख सकते हैं।

Create Alloy Project

+0

धन्यवाद! आपने मुझे इस जानकारी के साथ अपने बालों को खींच लिया। –

+0

क्या कोई तरीका है कि मैं एकाधिक फ़ाइलों में नियंत्रक जावास्क्रिप्ट को विभाजित कर सकता हूं, इसलिए इसे एक लंबे .js फ़ाइल नहीं होना चाहिए? –

+0

@ जस्टिन विन्सेंट आप अपनी कंट्रोलर फ़ाइलों को विभाजित कर सकते हैं हालांकि आपको पसंद है। बस मूल कंटेनर में "आवश्यकता" की आवश्यकता है। साथ ही, उन्हें एक तरह से संगठित रखें जो आपको समझ में आता है। यदि आप 'foo.js' से कोड को' bar.js' में विभाजित करते हैं और foo को इसके बारे में जानने की आवश्यकता है, तो बस 'var bar = आवश्यकता (' bar.js ')' –

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