extjs - नए Ext.app.EventDomain का उपयोग और फ़ंक्शन




extjs4.2 (2)

Ext.app.EventDomain का उपयोग करने के लिए इरादा नहीं है ; बल्कि, आप कस्टम ईवेंट डोमेन को लागू कर सकते हैं यदि आपको उनकी आवश्यकता है घटना डोमेन के पीछे का विचार काफी सरल है: यह एक ऐसा तरीका है कि उन भागों के बीच की घटनाओं को पारित किया जाए जो कि Ext.Component- व्युत्पन्न न हों।

सबसे अधिक उपयोग नियंत्रक बाध्यकारी है: 4.1 में केवल अन्य नियंत्रकों के तरीकों को सीधे (हार्ड बाइंडिंग) कॉल करना संभव था, जो परीक्षण के लिए बहुत खराब है। 4.2 में आप एक नियंत्रक की बजाय अन्य कंट्रोलर्स की घटनाओं को सुन सकते हैं (मुलायम बाध्यकारी) और स्पष्ट तर्क पृथक्करण कर सकते हैं, इसके बदले:

Ext.define('MyApp.controller.Foo', {
    extend: 'Ext.app.Controller',

    doSomething: function() {
        this.getController('Bar').doSomethingElse();
    }
});

Ext.define('MyApp.controller.Bar', {
    extend: 'Ext.app.Controller',

    doSomethingElse: function() {
        // The problem here is that this logic belongs to Bar controller
        // but this method has to be called from Foo controller,
        // which means Bar should always be around whenever Foo
        // needs to call it. Race conditions, anyone?
        ...
    }
});

तुम कर सकते हो:

Ext.define('MyApp.controller.Foo', {
    extend: 'Ext.app.Controller',

    doSomething: function() {
        this.fireEvent('doSomethingElse');
    }
});

Ext.define('MyApp.controller.Bar', {
    extend: 'Ext.app.Controller',

    init: function() {
        this.listen({
            controller: {
                '*': {        // '*' means any controller
                    doSomethingElse: this.doSomethingElse
                }
            }
        });
    },

    doSomethingElse: function() {
        // Not a problem anymore -- Foo fires an event, and if Bar
        // happens to be around, it reacts and does whatever it wants;
        // the benefit is that there is no direct method calling
        // so we don't have to watch for exceptions and do other
        // unnecessary stuff.
        ...
    }
});

अपनी खुद की घटनाओं को सुनने के लिए भी ठीक है - जो कुछ आप शायद उत्पादन में उपयोग नहीं करेंगे, लेकिन एक अच्छा साइड इफेक्ट है जो नियंत्रक इकाई परीक्षण के लिए बहुत सफलतापूर्वक इस्तेमाल किया जा सकता है।

अन्य नियंत्रकों की घटनाओं के अलावा, एक नियंत्रक अब स्टोर, डायरेक्ट प्रदाता और वैश्विक घटनाओं को सुन सकता है, जो कई बार उपयोगी हो सकता है।

मैं इस पर लिखने की योजना है जब 4.2 जारी होता है; आशा है कि यह तब तक थोड़ी मदद करता है

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

अब मैं नए Ext.app.EventDomain पर ठोकर खाई और आश्चर्य है कि क्या हमें इसे हमारे रिफैक्टरिंग में लागू करना चाहिए क्योंकि एक मुश्किल भाग घटनाओं हैं मेज पर रूटिंग का उपयोग करने पर भी हमें विचार है। लेकिन यह बहस अभी भी चल रहा है।

तो हमें Ext.app.EventDomain उपयोग करना चाहिए और यदि ऐसा है तो इसका उपयोग कैसे किया जाता है या हमें कस्टम रूटिंग के साथ बेहतर रहना चाहिए?

मेरा मतलब है कि सींच टच रूटिंग का उपयोग कर रहा है, लेकिन कोई इवेंटबस नहीं है और मैं कहूंगा कि सीनचा टच प्रदर्शन महत्वपूर्ण है इसलिए ऐसा लगता है कि दोनों कारणों से फ्रेमवर्क अलग-अलग हैं।


मुझे लगता है कि एक बेहतर समाधान होगा:

     grid1.on('itemclick', function(view, record) {
         grid2.reconfigure(record.products());
     );