2013-08-01 9 views
5

मैं एक मॉडल को उपclass करना चाहता हूं जिसे मैंने सेन्चा आर्किटेक्ट का उपयोग करके बनाया है। मान लें कि मेरे पास बेसमोडेल नामक एक मॉडल है जिसे मैंने पहले ही बनाया है, और मुझे एक और मॉडल बनाने की ज़रूरत है, इसे माईमोडेल कहते हैं, जो बेसमोडेल को बढ़ाता है। ExtJS और Sencha वास्तुकार कोसेन्चा आर्किटेक्ट: मॉडल को उपclassing

// BaseModel.js 
Ext.define('MyApp.model.BaseModel', { 
    extend: 'Ext.data.Model', 

    fields: [...] 
}); 

और

// MyModel.js 
Ext.define('MyApp.model.MyModel', { 
    extend: 'MyApp.model.BaseModel', 

    fields: [...] 
}); 

मैं नया लेकिन यह कुछ ऐसा है जो उचित के लिए इतना महत्वपूर्ण कोड में करते हैं और करने के लिए इतना आसान है: कोड में, यह कुछ इस तरह दिखेगा सॉफ़्टवेयर डिज़ाइन जो मुझे लगता है कि आर्किटेक्ट में ऐसा करने का एक तरीका होना चाहिए। दुर्भाग्य से मैं यह नहीं समझ सका कि इसे आसानी से कैसे किया जाए। कुछ खुदाई के बाद मुझे Sencha डॉक्स में इस पाया, http://docs.sencha.com/architect/2/#!/guide/classes है, जो शीर्षक "कस्टम वर्ग" के अंतर्गत निम्नलिखित राज्यों:

जबकि यहाँ वर्णित सुविधाओं टूलबॉक्स में समर्थित मदों से कक्षाओं के निर्माण को सक्षम, कभी कभी आपको एक सादे अभिभावक वर्ग या कक्षा बनाने की आवश्यकता हो सकती है जो कि किसी अन्य वर्ग को विस्तारित करता है जो टूलबॉक्स में प्रकट नहीं होता है। आप टूलबॉक्स में कक्षा आइटम का उपयोग कर आर्किटेक्ट में ऐसा कर सकते हैं।

ठीक है, वादा करता है - इसलिए मैंने कोशिश की। प्रोजेक्ट इंस्पेक्टर में मैंने प्लस साइन मारा, "कक्षा" में गया, और उस हिट "मॉडल" के भीतर। तो अब मेरे पास मेरी परियोजना में एक कस्टम मॉडल क्लास है। मैं इसे MyModel कहता हूं और मैंने MyApp.model.BaseModel होने के लिए "विस्तार" कॉन्फ़िगरेशन सेट किया है। तो अब कम से कम कोड सही है और मेरे ऊपर जैसा दिखता है। हालांकि, आर्किटेक्ट को यह नहीं पता है कि MyModel कक्षा एक मॉडल है, भले ही यह मेरे प्रोजेक्ट इंस्पेक्टर के "मॉडल" खंड में बैठी हो और BaseModel तक फैली हुई हो। इसमें मॉडल फ़ील्ड गुणों में से कोई भी नहीं है जैसे "फ़ील्ड" जिन्हें मुझे निर्दिष्ट करने की आवश्यकता है, और मैं किसी भी प्रकार के स्टोर के साथ MyModel को संबद्ध नहीं कर सकता। दूसरे शब्दों में, आर्किटेक्ट MyModel को पूरी तरह से कस्टम क्लास के रूप में मानता है और किसी भी मॉडल व्यवहार का पर्दाफाश नहीं करता है। यह मूल रूप से पूरी तरह बेकार subclassing के इस तरीके बनाता है - मैं एक मॉडल subclass कर सकते हैं, लेकिन फिर मैं इसे अपने प्रोजेक्ट में कहीं भी एक मॉडल के रूप में उपयोग नहीं कर सकता, तो बात क्या है?

तो सवाल यह है कि मैं MyModel को वास्तविक मॉडल के रूप में कैसे इलाज कर सकता हूं? क्या आर्किटेक्ट में उप-वर्ग का सही तरीका नहीं है? मैं बस अपनी परियोजना शुरू कर रहा हूं, लेकिन मुझे लगता है कि यह अक्सर मॉडल, नियंत्रक, स्टोर इत्यादि के उप-वर्ग की आवश्यकता है और यदि मैं आर्किटेक्ट के साथ ऐसा नहीं कर सकता तो यह एक गंभीर सीमा है।

+0

यह कैसे हल किया गया ?? –

उत्तर

0

आप सभी सही चीजें कर रहे हैं। आर्किटेक्ट अपने वर्तमान रूप में 'काम करता है' इस तरह से एक और है जो मुझे लगता है कि बेहतर परिणाम प्रदान करेगा।

एक पारंपरिक मॉडल का उपयोग कर की कोशिश करो और एक userAlias ​​बेस मॉडल xtype

+0

क्या आप बेस क्लास पर उपयोगकर्ता एलीआस सेट करने या व्युत्पन्न करने का मतलब रखते हैं? फिर आधार/व्युत्पन्न संबंध कैसे स्थापित किया जाता है? – matejk

0

उर्फ ​​मैं एक ही मुद्दा है, जो वास्तुकार का उपयोग कर के मामले में एक सौदा ब्रेकर हो गया होता अनुभव पर सेट के साथ createAlias ​​का उपयोग करें। "क्षेत्रों", "hasMany", "प्रॉक्सी" आदि

आप:

मैं, एक कस्टम वर्ग बनाने मौजूदा मॉडल का विस्तार करें, और तब नया वर्ग पर कस्टम गुण बना कर उसके चारों ओर काम करने में सक्षम था गुणों को ऑरे या ऑब्जेक्ट टाइप करने के लिए सेट कर सकते हैं जो आपको कोड संपादक में फ़ील्ड को संपादित करने देता है।

यह एक आदर्श समाधान नहीं है क्योंकि आर्किटेक्ट कक्षा को मॉडल के रूप में नहीं पहचानता है, और इसलिए आप खेतों को खींच और छोड़ नहीं सकते हैं।

हालांकि आउटपुट कोड एक मूल रूप से बनाए गए मॉडल के प्रति वफादार है।

उम्मीद है कि यह मदद करता है, बेन

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