2013-01-22 75 views
9

मैं अपने app.js में Ext जे एस 4. controllers संपत्ति का उपयोग कर एक आवेदन बना लिया है साथ Sencha Cmd का उपयोग केवल मुख्य नियंत्रक शामिल loadController() विधि देखें)। इन नियंत्रकों को गतिशील रूप से लोड किया जाता है और मेरी index.html फ़ाइल में सूचीबद्ध नहीं हैं।गतिशील लोड नियंत्रकों

आदेश सर्वर से तैनाती के लिए उत्पादन संस्करण उत्पन्न करने के लिए मैं Sencha Cmd उपयोग कर रहा हूँ अपने आवेदन फ़ोल्डर में निम्न आदेश जारी करके:

sencha app build 

उपकरण सामान्य रूप से खत्म और एक बड़ा सभी वर्गों में सभी फाइलों को संपीड़ित करता है। जे एस। समस्या यह है कि मेरे गतिशील रूप से लोड नियंत्रक उस फ़ाइल में शामिल नहीं हैं।

गतिशील रूप से लोड किए गए नियंत्रकों (कुल में 100 से अधिक) को सेन्चा सीएमडी द्वारा संसाधित और संसाधित करने का सही तरीका कौन सा है?

मुझे पता है, कि मैं उन्हें अपने app.js में सूचीबद्ध कर सकते हैं, या कुछ Ext.require का उपयोग कर फ़ाइल में शामिल है, लेकिन मैं 100 से अधिक विभिन्न नियंत्रकों, विचारों, मॉडल और दुकानों अपने निर्माण में स्वचालित रूप से शामिल करने के लिए सही दृष्टिकोण के लिए मांग कर रहा हूँ। मेरा मानना ​​है कि एक्सटी जेएस के अन्य उपयोगकर्ता हैं, जो बड़े पैमाने पर अनुप्रयोग बना रहे हैं और किसी भी तरह का निर्माण कर रहे हैं और मैं किसी भी सुझाव या सिर्फ success stories के लिए आभारी रहूंगा, जो मुझे बनाने के लिए सही तरीका खोजने में मदद करेगा।

उत्तर

7

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

ध्यान दें कि आपको के भीतर पूरी तरह से योग्य नामों का उपयोग करने की आवश्यकता होगी सरणी का उपयोग करता है!

मैं buildtool का उपयोग नहीं करता इसलिए मैं इसका परीक्षण नहीं कर सकता लेकिन इसे काम करना चाहिए। टिप्पणियों से


अद्यतनउदाहरण @bhovhannes

bhovhannes द्वारा प्रदान की: मैं build.xml में एक कोड है, जो मेरी नियंत्रकों के सभी नामों को जमा करता है जोड़ दिया है जब मैं सेन्चा ऐप बिल्ड करता हूं तो सरणी का उपयोग करता है। इस तरह से मैं विकास के दौरान उपयोग करता है सरणी में कुछ भी नहीं भर सकते हैं, बस नियंत्रक फ़ोल्डर में नियंत्रकों जोड़ने के लिए, सभी क्योंकि उनमें मेरे ऐप

एप्लिकेशन का उपयोग करके डायनामिक लोड किए गए हैं।js

Ext.application({ 
    name: 'MyApp', 
    appFolder: 'app', 

    controllers: [ 
     "main.App" 
    ], 

    uses: [ 
     /*ant-generated-content-start*/ /*ant-generated-content-end*/ 
    ], 

    autoCreateViewport: true, 
}); 

build.xml

<?xml version="1.0" encoding="utf-8"?> 
<project name="MyApp" default=".help"> 
    <import file="${basedir}/.sencha/app/build-impl.xml"/> 

    <target name="-before-build"> 

     <echo message="Collecting all controllers in application class property ... "/> 
     <fileset id="app_controllers" dir="${app.dir}/app/controller" casesensitive="yes"> 
      <include name="**/*.js"/> 
     </fileset> 
     <pathconvert pathsep="," property="app_controller_names" refid="app_controllers" targetos="unix"> 
      <chainedmapper> 
       <globmapper from="${app.dir}/app/*" to="${ant.project.name}/*" casesensitive="no" handledirsep="yes"/> 
       <chainedmapper> 
        <regexpmapper from="^(.*)\.js$$" to='"\1"'/> 
        <filtermapper> 
         <replacestring from="/" to="."/> 
         <replacestring from="\" to="."/> 
        </filtermapper> 
       </chainedmapper> 
      </chainedmapper> 
     </pathconvert> 
     <echo message="Collected controllers: ${app_controller_names}"/> 

     <echo message="Injecting into app.js ..."/> 
     <replaceregexp file="${app.dir}/app/app.js" 
         match="/\*ant-generated-content-start\*/(.*)/\*ant-generated-content-end\*/" 
         replace="/*ant-generated-content-start*/ ${app_controller_names} /*ant-generated-content-end*/" 
         byline="true" 
       /> 
    </target> 

    <target name="-after-build"> 
     <echo message="Reverting to original app.js ..."/> 
     <replaceregexp file="${app.dir}/app/app.js" 
         match="/\*ant-generated-content-start\*/(.*)/\*ant-generated-content-end\*/" 
         replace="/*ant-generated-content-start*/ /*ant-generated-content-end*/" 
         byline="true" 
       /> 
    </target> 

</project> 
+1

'uses' के लिए लिंक के लिए धन्यवाद। यह उपयोगी हो सकता है। लेकिन इस तरह मेरे सभी नियंत्रकों को एक विशाल 'उपयोग' सरणी के माध्यम से शामिल किया जाएगा। और यह न केवल विकास को और जटिल बनाता है (प्रत्येक बार, जब एक नया नियंत्रक जोड़ते हैं, तो उसे इसे 'उपयोग' अनुभाग में भी जोड़ना चाहिए), लेकिन सभी नियंत्रकों को 'all-classes.js' में भी डालता है, जो गतिशील नियंत्रक लोडिंग पूर्ण बनाता है (गतिशील रूप से लोड क्यों करें, अगर नियंत्रक पहले से डाउनलोड हो चुका है और 'all-classes.जेएस'' में सभी शेष सामग्री के साथ उपलब्ध है?) – bhovhannes

+0

@bhovhannes मुझे विकास करते समय नकारात्मकता दिखाई देती है लेकिन ध्यान दें कि यह सुनिश्चित किया जाता है कि कक्षा मौजूद है। मैं व्यक्तिगत रूप से एक सर्वरसाइड संचालित दृष्टिकोण का उपयोग करता हूं जहां फ्रंटेंड उपयोगकर्ता-भूमिका द्वारा बनाया जाता है। मुझे पता है कि जब मैं उन्हें बुलाता हूं तो मेरे नियंत्रक पहले से ही वहां हैं और यही वह सब है जो आपको परवाह करना चाहिए। लेकिन मुझे यह स्वीकार करना होगा कि मैं नहीं हूं जो सेन्चा सीएमडी उपकरण में उपयोग किया जाता है। हो सकता है कि एक तर्क है जो आपको निर्माण प्रक्रिया में एक संपूर्ण फ़ोल्डर शामिल करने की अनुमति देता है, जो एक समाधान हो सकता है जिसे आप ढूंढ रहे हैं। – sra

+0

मैंने build.xml में एक कोड जोड़ा है, जो मेरे नियंत्रकों के सभी नाम 'उपयोग' सरणी में एकत्र करता है जब मैं 'सेन्चा ऐप बिल्ड' करता हूं। इस तरह मैं विकास के दौरान 'उपयोग' सरणी में कुछ भी नहीं भरता, बस नियंत्रकों को 'नियंत्रक' फ़ोल्डर में जोड़ता हूं, क्योंकि वे सभी मेरे ऐप से गतिशील रूप से लोड होते हैं। – bhovhannes