2011-02-08 16 views
5

मेरे पास ExtJS में एकाधिक विरासत के संबंध में एक प्रश्न है। जबकि मुझे पता है कि मैं ऐसा करने के लिए कोड को डुप्लिकेट कर सकता हूं, लेकिन मैं जानना चाहता हूं कि इसे और अधिक कुशलता से कोड करने का कोई तरीका है या नहीं।एकाधिक विरासत Extzs?

मेरे पास Kore.ux.grid.GridPanel नामक मेरे ढांचे में GridPanel घटक अनुकूलित किया गया है। यह अतिरिक्त सामान्य कार्यक्षमताओं के साथ Ext.GridPanel बढ़ाता है और आरईएसटी कार्यों के लिए इंटरफ़ेस प्रदान करता है।

जल्द ही, मेरे सहयोगी EditorGridPanel को उसी तरीके से लागू करने के लिए चाहते थे, यानी, वह संपादन योग्य होना चाहती है, और साथ ही, आरईएसटी कार्यों को आसानी से करने की क्षमता है।

मेरा सवाल यह है कि, क्या कार्यात्मकताओं को अनुकूलित करने के लिए मैं Ext.EditorGridPanel का विस्तार कर सकता हूं?

किसी भी व्याकरण त्रुटियों के लिए खेद है और यदि यह भ्रमित हो रहा है तो मैं इसे फिर से बदल सकता हूं। धन्यवाद!!

संपादित

मैं फिर से googled, और मैं कह रहा यह नामुमकिन है धागे पाया। क्या मुझे कोई समस्या है तो मुझे कोई बेहतर कोडिंग पैटर्न का पालन करना चाहिए?

धन्यवाद!

संपादित करें पर दोबारा

तो खेद मैं संरचना है कि मुझे सूट पाया .. यहाँ विधि मैं मेरे लिए उपयोगी पाया है:

var Common = function(){} //abstract class 
Ext.apply(Common.prototype, { 

    a : function(){}, 
    b: function(){}... 

}); 

Ext.ux.SomePanelA = Ext.extend (Ext.Panel, { 

    stuff : ............ 

}); 

Ext.ux.SomePanelB = Ext.extend (Ext.Panel, { 

    diffStuff : ............ 

}); 

Ext.applyIf(Ext.ux.SomePanelA.prototype, Common.prototype); 
Ext.apply(Ext.ux.SomePanelB.prototype, Common.prototype); 

कोड स्रोत: http://www.sencha.com/forum/showthread.php?48000-multiple-inheritance&p=228271&viewfull=1#post228271

फिर से करें यदि आपको लगता है कि आपके पास बेहतर समाधान है तो उपयोगी सुझाव प्रदान करें :) धन्यवाद!

उत्तर

5

आपको वास्तव में क्या देखना है, ExtJS प्लगइन्स हैं।

/** 
* Boilerplate code taken from 'ExtJS in Action' by Jay Garcia 
*/ 
YourNameSpace.RestGridPlugin = Ext.extend(Object, { 
    constructor : function(config) { 
    config = config || {}; 
    Ext.apply(this.config); 
    }, 

    init : function(parent) { //parent argument here, is whatever you apply your plugin to 
    parent.on('destroy', this.onDestroy, this); 
    Ext.apply(parent, this.parentOverrides); 
    }, 

    onDestroy : function() { 
    //here you need to free any resources created by this plugin 
    }, 

    parentOverrides : { 
    //here you do your magic (add functionality to GridPanel) 
    } 

}); 

Ext.preg('restgridplugin',YourNameSpace.RestGridPlugin); //register your brand ne plugin 

प्रयोग

someGrid = { 
    xtype: 'grid', 
    columns: ... 
    store: ... 
    plugins: [ 
    'restgridplugin' 
    ] 
} 

someEditorGrid = { 
    xtype: 'editorgrid', 
    columns: ... 
    store: ... 
    plugins: [ 
    'restgridplugin' 
    ] 
} 
+0

प्लगइन! मैं इसका अस्तित्व क्यों भूल जाता हूं !! सुझाव के लिए धन्यवाद :) देखेंगे कि मैं इसे ढांचे में कैसे शामिल करूंगा।धन्यवाद :) –

+0

लेकिन यह मेरे मामले के अनुरूप नहीं हो सकता है क्योंकि मेरा कस्टमाइज्ड ग्रिडपैनल अनुकूलित पेजिंग टुलबार, पूर्वनिर्धारित बटन, खोज बॉक्स, आरईएसटी ... आदि प्रदान करता है। प्लगइन रास्ता नहीं हो सकता है :) वैसे भी सुझाव के लिए धन्यवाद! –

+0

क्यों नहीं? आप इन कार्यक्षमताओं को अपनी कार्यक्षमता को बाध्य करने के लिए प्लगइन के भीतर से इन कस्टम घटकों तक पहुंच सकते हैं। आखिरकार, प्लगइन क्या करता है वास्तव में 'Ext.apply()' बस जिस तरह से आप इसे करते हैं। यह सिर्फ इसके लिए थोड़ा अधिक मजबूत और उपयोग करने में आसान एपीआई जोड़ता है। – Mchl

0

सामान्य कार्यक्षमता वाले बेस क्लास के रूप में Kore.ux.grid.AbstractGridPanel बनाएं। और दो बच्चे वर्ग बनाएं: Kore.ux.grid.GridPanel और Kore.ux.grid.EditorGridPanel (विशिष्ट कार्यक्षमता के साथ)।

+0

बात है देखने के लिए कृपया, '' Ext.grid.EditorGridPanel' Ext.grid.GridPanel', बाकी फैली "इंटरफ़ेस" प्रदान किया गया है 'Ext.grid.GridPanel'' का विस्तार कर रहा है, और क्योंकि मुझे 'Ext.grid.EditorGridPanel' में प्रदान की गई कार्यक्षमताओं की आवश्यकता है, मुझे लगता है कि एक सामान्य आधार वर्ग लिखकर सबसे अच्छा तरीका है, और 'Ext.grid' सामान्य आधार वर्ग के साथ .GridPanel' और 'Ext.grid.EditorGridPanel'। वैसे भी इनपुट के लिए धन्यवाद :) –

0

मैं Ext में एकाधिक वंशानुक्रम पूरा करने के लिए प्लग-इन का उपयोग कर से सहमत नहीं हैं। प्लगइन्स का उद्देश्य व्यवहार बदलना या नई कार्यक्षमता जोड़ना है।

सही तरीके से एकाधिक वंशानुक्रम प्राप्त करने के लिए mixins का उपयोग करना है, इस अद्भुत स्पष्टीकरण SenchaCon 2011: The Sencha Class System

Ext.define('FunctionalityA', { 
    methodA: function() { 
     ... 
    } 
}); 

Ext.define('FunctionalityB', { 
    methodB: function() { 

    } 
}); 

Ext.define('MultipleFunctionality', { 
    mixins: [ 
     'FunctionalityA', 
     'FunctionalityB' 
    ], 

    method: function() { 
     methodA(); 
     methodB(); 
    } 
}); 
संबंधित मुद्दे