2016-06-09 6 views
5

काम नहीं कर रहा है मैंने अभी देखा है कि Ext.app.Controller पर स्टोर कॉन्फ़िगर http://docs.sencha.com/extjs/6.0/6.0.2-classic/#!/api/Ext.app.Controller-cfg-stores सही पथ में नहीं देख रहा है (दृश्य कॉन्फ़िगरेशन के साथ समान होता है)।Ext.app.Controller पर ExtJs 6 स्टोर कॉन्फ़िगरेशन

, उदा,

Ext.define('MyApp.controller.Menu', { 
    extend: 'Ext.app.Controller', 
    stores: ['Menu'] 
... 
}); 

इस के लिए

http://localhost/myapp/app/controller/store/Menu.js?_dc=20160607211025

नोटिस नियंत्रक फ़ोल्डर दिखेगा

बजाय

http://localhost/myapp/app/store/Menu.js?_dc=20160607211025

शुरुआत मैंने सोचा था कि यह मेरा परियोजनाओं में से एक के लिए विशिष्ट एक विन्यास मुद्दा था, लेकिन फिर एक अलग परियोजना पर एक ही बात मिल गया पर।

मैं ExtJs 6.02

उपयोग कर रहा हूँ मैं जानता हूँ कि मैं MyApp.store.Menu की तरह पूर्ण वर्ग के नाम का उपयोग कर सकते है, लेकिन फिर गेटर बहुत बदसूरत हो जाएगा। (यह एक विशाल कोड बेस पर हो रहा है जिसे मैंने अभी अपग्रेड किया है ताकि पूर्ण श्रेणी का नाम मेरा अंतिम संसाधन होगा)।

क्या किसी को इस समस्या का सामना करना पड़ा है?

+0

क्या आपको अपने नियंत्रक में स्टोर की आवश्यकता थी? यह उदाहरण सुझाव देता है कि यह आवश्यक है: [Ext.app.Controller # cfg-stores] (http://docs.sencha.com/extjs/6.0.2-classic/Ext.app.Controller.html#cfg-stores)। –

+0

स्टोर: ['मेनू'] आपको –

उत्तर

2

मैं (मेरे साथ नंगे) कारण मिल गया है:

https://docs.sencha.com/extjs/6.0/6.0.2-classic/source/Controller2.html#Ext-app-Controller

नज़र में:

onClassExtended -> Controller.resolveNamespace -> Ext.app.getNamespace

नामस्थान हल होने के बाद वे महत्वपूर्ण हैं, निर्भरताओं को संसाधित करने के लिए एक कॉल है:

Controller.processDependencies(proto, requires, namespace, 'store', data.stores); 

मैं इस पर शोध किया और Ext.app.getNamespace ext 5 और 6

तो क्यों ExtJs 5

Ext.getNamespace("MyApp.controller.SomeController"); // returns MyApp

में यह है में और ExtJs 6 पर समान होता है

Ext.getNamespace("MyApp.controller.SomeController"); // returns MyApp.controller

कारण कंसोल द्वारा पाया जाता है।लॉग इन करें Ext.ClassManager.paths वहाँ अब एक नई प्रविष्टि कि MyApp.controller

enter image description here

से मेल खाती है कि पहले वहाँ MyApp.controller (ZHT.controller) के लिए कोई कुंजी

था और क्या Ext.getNameSpace है देखने के लिए है ' गहरी उपसर्ग 'आप यहाँ देख http://docs.sencha.com/extjs/6.0/6.0.2-classic/source/Util.html#Ext-app-Util

[अद्यतन] तो एक बात यह है कि किया जा सकता है इस तरह स्थिर विधि resolveNamespace ओवरराइड करने के लिए है के रूप में कर सकते हैं:

statics: { 
    resolveNamespace: function(cls, data) { 
      var Controller = Ext.app.Controller, 
       namespaceRe = cls.prototype.isProfile ? Controller.profileRegex : Controller.controllerRegex, 
       className, namespace, match; 
      /* 
      * Namespace resolution is tricky business: we should know what namespace 
      * this Controller descendant belongs to, or model/store/view dependency 
      * resolution will be either ambiguous or plainly not possible. To avoid 
      * guessing games we try to look for a forward hint ($namespace) that 
      * Application class sets when its onClassExtended gets processed; if that 
      * fails we try to deduce namespace from class name. 
      * 
      * Note that for Ext.app.Application, Controller.onClassExtended gets executed 
      * *before* Application.onClassExtended so we have to delay namespace handling 
      * until after Application.onClassExtended kicks in, hence it is done in this hook. 
      */ 
      className = Ext.getClassName(cls); 
      namespace = data.$namespace || data.namespace || 
       Ext.app.getNamespace(className) || 
       ((match = namespaceRe.exec(className)) && match[1]); 

      //<debug> 
      if (!namespace) { 
       Ext.log.warn("Missing namespace for " + className + ", please define it "+ 
        "in namespaces property of your Application class."); 
      } 
      //</debug> 


      //This is the only change on this override. 
      //http://stackoverflow.com/questions/37731213/extjs-6-stores-config-on-ext-app-controller-not-working/37733261#37733261 
      if(namespace && namespace.indexOf(".controller") > -1) { 
       namespace = namespace.slice(0, namespace.indexOf(".controller")); 
      } 

      return namespace; 
     } 
    } 

यदि आपको बेहतर समाधान पता है तो कृपया मुझे बताएं!

+0

दुकान एक 'storeId' है? इससे मदद मिल सकती है .. –

+0

सभी उदाहरणों में यह नहीं है, और यदि मैं दुकानों का संदर्भ देने के लिए स्टोर आईडी का उपयोग करने के लिए स्विच करता हूं तो मैं पहले से उपयोग किए जा रहे गेटर्स को खो देता हूं, लेकिन सुझाव के लिए धन्यवाद। –

0

मुझे इसी तरह के मुद्दों का सामना करना पड़ा है और इसे हल करने का तरीका में stores कॉन्फ़िगरेशन के लिए आवश्यक सभी स्टोर जोड़ना था।

+0

की आवश्यकता होनी चाहिए, भले ही मुझे एप्लिकेशन.जेएस पर स्टोर की आवश्यकता हो, फिर भी मुझे स्टोर्स कॉन्फ़िगरेशन को नियंत्रक में रखना होगा ताकि मैं स्वचालित गेटटर का उपयोग कर सकूं। http://docs.sencha.com/extjs/6.0/6.0.2-classic/#!/api/Ext.app.Controller-cfg-stores –

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