2012-06-06 23 views
9
Ext.define('DigitalPaper.controller.Documents', { 
extend: 'Ext.app.Controller', 

views: ['Documents'], 
stores: ['Documents'], 
models: ['Documents'], 

init: function() { 
    console.log('[OK] Init Controller: Documents'); 
} 
}); 

इस नियंत्रक के मॉडल या दृश्य को पाने के लिए क्या कार्य है? मैंनेExtjs4 एमवीसी, नियंत्रक वर्ग से मॉडल या दृश्य कैसे प्राप्त करें?

Ext.getModel('Documents'); 
    this.getModel('Documents'); 
    this.getModel(); 
    this.getDocumentsModel(); 

कोई सुझाव दिया है?

उत्तर

9

समाधान मिला:

नियंत्रक इसे देखने के लिए संदर्भ का उपयोग करना संभव है में:

refs: [{ 
    ref: 'viewDocuments', // will be create the method this.getViewDocuments(); 
    selector: 'Documents' 
}], 

तो तुम इस के साथ दृश्य प्राप्त कर सकते हैं:

this.getViewDocuments(); 
+6

मिलता है कोई भी ऐसा कहता है कि "this.getViewDocuments();" संदर्भ होना चाहिए - या संदर्भ में "यह" क्या है, लोग मुझे इसका उपयोग करने की उम्मीद कर रहे हैं :( –

+0

@PaulHutchinson ExtJS नियंत्रक परिभाषा के 'refs' अनुभाग का उपयोग करके, आप सामान्य रूप से एक्सेस किए गए घटकों के त्वरित संदर्भ बना सकते हैं। संदर्भ स्वचालित रूप से 'रेफरी' के लिए प्रदत्त पाठ के आधार पर 'गेटटर' विधियां बनाएं। इस उदाहरण में, निर्मित गेटर 'getViewDocuments' है। इसे पूरे नियंत्रक के नाम से बुलाया जा सकता है, जहां 'यह' नियंत्रक के दायरे को संदर्भित करता है। 'चयनकर्ता' परिभाषा परिणामी Ext.ComponentQuery.query() कॉल में उपयोग किया जाता है। ComponentQuery.query() के लिए दस्तावेज़ देखें और देखें कि चयनकर्ता परिभाषा कितनी शक्तिशाली हो सकती है! –

0

getModel() और getView() नियंत्रक के मॉडल/दृश्य वापस नहीं लौटते हैं - वे ऐप में इन उदाहरणों को वापस लौटते हैं (और यदि कोई मौजूद नहीं है, तो उन्हें इंस्टाल किया जाएगा)।

आप बस देखें/मॉडल नाम पाने के लिए इसका उपयोग कर सकते हैं:

this.views[0] 

मुझे यकीन है कि जहां आप उपयोग कर रहे अपने हो जाता है (यानी, this.getModel ('विवरण')), लेकिन इन नहीं कर रहा हूँ मॉडल के एक उदाहरण को सही ढंग से वापस करना चाहिए (कन्स्ट्रक्टर एकमात्र ऐसा स्थान है जहां आपको इनमें से कोई समस्या हो सकती है)।

+0

इस उत्तर करता है बहुत समझ में नहीं आता है। –

+0

हां, मैंने प्रश्न को गलत समझा होगा।और आप सही हैं, GetModel कक्षा को एक उदाहरण नहीं देता है; यही कारण है कि हम .create() का उपयोग करते हैं; – Izhaki

1

यह काम करना चाहिए:

Ext.define('DigitalPaper.controller.Documents', { 
extend: 'Ext.app.Controller', 

views: ['Documents'], 
stores: ['Documents'], 
models: ['Documents'], 

init: function() { 
    console.log('[OK] Init Controller: Documents'); 

    // get references to view and model classes which can be used to create new instances 
    console.log('View', this.getDocumentsView()); 
    console.log('Model', this.getDocumentsModel()); 

    // reference the Documents store 
    console.log('Store', this.getDocumentsStore()); 

} 

});

ये विधियां एक्स्ट कंट्रोलर में एक विधि द्वारा बनाई गई हैं जो गेटर्स बनाती है। Ext नियंत्रकों

createGetters: function(type, refs) { 
    type = Ext.String.capitalize(type); 
    Ext.Array.each(refs, function(ref) { 
     var fn = 'get', 
      parts = ref.split('.'); 

     // Handle namespaced class names. E.g. feed.Add becomes getFeedAddView etc. 
     Ext.Array.each(parts, function(part) { 
      fn += Ext.String.capitalize(part); 
     }); 
     fn += type; 

     if (!this[fn]) { 
      this[fn] = Ext.Function.pass(this['get' + type], [ref], this); 
     } 
     // Execute it right away 
     this[fn](ref); 
    }, 
    this); 
}, 
+0

getDocumentsView() दस्तावेज़ों का एक उदाहरण नहीं देता है –

+0

अच्छा बिंदु। मैंने टिप्पणियों के साथ उदाहरण स्निपेट अपडेट किया जो नोट करता है कि गेटर्स क्या लौट रहे हैं। –

+0

कार्य देखें() मॉडल फ़ंक्शन() स्टोर ऑब्जेक्ट {ईवेंट = {...}, डेटा = {...}, समूह = {...}, altri elementi ...} -> मुझे यह कंसोल में मिलता है, यह स्टोर के लिए काम करता है लेकिन यह दृश्य और मॉडल के लिए नहीं है। मुझे "फ़ंक्शन()" –

7

बहुत अजीब हैं, किसी दिए गए नियंत्रक का एक उदाहरण है कि कोई फर्क नहीं पड़ता कि आप कितने संबंधित दृश्य उदाहरण हो सकता है: http://docs.sencha.com/ext-js/4-0/source/Controller.html#Ext-app-Controller

यहाँ कि विधि लग रहा है की तरह है। अधिकांश एमवीसी या एमवीपी सिस्टम में प्रति दृश्य उदाहरण एक नियंत्रक उदाहरण होता है।

यदि आप एकाधिक दृश्य उदाहरणों का उपयोग करने की योजना बना रहे हैं, तो आपको नियंत्रक में उन विचारों के संदर्भ नहीं रखना चाहिए।

आप ExtJs दृश्य उदाहरण (प्लस निर्भरता इंजेक्शन) प्रति एक नियंत्रक उदाहरण है कि के लिए कुशल व्यवहार के MVC विस्तार में देखना चाहते हो सकता है:

http://deftjs.org/

फिर भी, controller.getView() के लिए एक संदर्भ रिटर्न क्लास देखें, ऑब्जेक्ट इंस्टेंस नहीं। GetModel() के साथ ही। getStore() एक स्टोर उदाहरण वापस करता है।

अपने नियंत्रक में, आप कुछ इस तरह कर सकते हैं:

this.viewInstance = this.getDocumentsView().create(); 

मैं भी विलक्षण में अपने मॉडल के नामकरण की सिफारिश करेंगे। यह एक दस्तावेज नहीं है। यह एक दस्तावेज है।

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

  • कोई संबंधित समस्या नहीं^_^