2011-09-13 6 views
6

मैं कई मानक फॉर्म फ़ील्ड को एक्स्टजेस 4 में एक कस्टम फॉर्म फ़ील्ड में समूहित करना चाहता हूं। असल में, मैं एक श्रेणी चयनकर्ता चाहता हूं: जब आप पहले combobox से एक श्रेणी का चयन करते हैं, तो एक माध्यमिक combobox इसके उपश्रेणियों को प्रदर्शित करता है, और इसी तरह।अन्य फॉर्म फ़ील्ड को समूहीकृत करके कस्टम फॉर्म फ़ील्ड कैसे बनाएं?

मैंने पहले से ही इसके लिए तर्क लिखा है और यह सभी एक कस्टम घटक में encapsulated है जो Ext.form.FieldSet को बढ़ाता है। लेकिन, मैं रिकॉर्ड के साथ एक फॉर्म के अंदर इस घटक का उपयोग करना चाहता हूं, इसलिए मुझे लगता है कि मुझे इसे सेटवेल्यू, getValue और एक सत्यापनकर्ता जैसे कार्यों के साथ एक फ़ील्ड में बदलने की आवश्यकता है। मुझे Ext.form.field.Base मिला जो यह सब प्रदान करता है, लेकिन मुझे दो घटकों को सामंजस्यपूर्ण रूप से संयोजित करने का कोई तरीका नहीं मिल रहा है (Ext.form. फ़ील्डसेट + जैसे कंटेनर जैसे Ext.form.field.base) ।

क्या किसी को पता है कि मैं इसे कैसे और कैसे पूरा कर सकता हूं?

अग्रिम धन्यवाद!

उत्तर

7

निम्नलिखित समाधान सबसे अच्छा नहीं हो सकता है। हालांकि यह काम करना चाहिए।

Ext.form.field.Base बढ़ाएं। फिर Ext.form.FieldSetafterrender हैंडलर बनाएं और इसे फ़ील्ड के inputEl में जोड़ें।

Ext.define('Ext.ux.form.field.MyCoolField', { 
    extend:'Ext.form.field.Base', 
    requires: ['Ext.util.Format', 'Ext.XTemplate'], 
    fieldSubTpl: [ 
     '<div id="{id}" class="{fieldCls}"></div>', 
     { 
      compiled: true,   
      disableFormats: true  
     }   
    ], 

    isFormField: true, 
    submitValue: true, 
    afterRender: function() { 
     this.callParent(); 

     this.fieldSet = Ext.create('Ext.form.FieldSet', { 
      items: [{ 
       // ... config of the first item 

       // The following configs should be set to false. It's important. 
       // Otherwise form will assume this items as its fields 
       isFormField: false, 
       submitValue: false 
     }); 
     this.fieldSet.render(this.inputEl); 
    }, 

    // and here overriding valueToRaw and so on 
    // ... 
}); 
+1

धन्यवाद! यही वह है जो मैंने कर दिया। मुझे नहीं पता कि क्यों इसमें कुछ प्रतिपादन समस्याएं हैं: 100% एंकर लेआउट का उपयोग करते समय भी फ़ील्ड कंटेनर की पूरी चौड़ाई तक नहीं पहुंच जाएगी। मैंने एक 'Ext.apply (यह, {श्रोताओं: {आकार बदलें: फ़ंक्शन() {$ this.container.doLayout();}}});' और यह आंशिक रूप से समस्या हल करता है। हैक हैक हैक। :) मैं इसे स्वीकार करने के लिए चिह्नित कर रहा हूं अगर कोई और बेहतर विचार के साथ नहीं आता है। – liviucmg

2

मैं एक अलग तरीके से इस पूरा किया, लेकिन अस्वीकरण:: तो फिर, ज़ाहिर है, ओवरराइड क्षेत्र के valueToRaw, setRawValue ...

यहाँ एक कोड है यह ExtJS में काम करना बंद कर 4.1

मैंने Ext.container.Container को बढ़ाया, फिर एक mixin के रूप में Ext.form.field.Field जोड़ा। वहां से मैंने getValue/setValue लागू किया। यह सब बहुत अच्छा काम किया, लेकिन अचानक 4.1 में विभिन्न प्रकार के मुद्दे हैं।

+0

क्या आप अपना कोड कहीं कहीं पोस्ट कर सकते हैं? इस तरह हम सभी को यह काम मिल सकता है – Misiu

+0

मुझे डर है कि मैं तब से नहीं कर सकता क्योंकि मैं अब उस कंपनी के साथ काम नहीं करता हूं और अब कोड नहीं है! –

+1

मैं इसे किसी बिंदु पर पुन: पेश करने का प्रयास कर सकता हूं, लेकिन मैंने थोड़ी देर में EXTjs के साथ काम नहीं किया है। यह ईमानदारी से बहुत जटिल नहीं था, हालांकि मूल रूप से ऊपर वर्णित अनुसार, केवल "मुश्किल" चीज मैंने एक मिश्रण के रूप में Form.field.Field को जोड़ना था, इसलिए "कुल" फ़ील्ड एक सामान्य एकल फ़ील्ड की तरह व्यवहार कर सकता था, एक बार प्राप्त करने के बाद और सेट वैल्यू लागू किया गया था। वहां से यह निहित बाल क्षेत्रों से निपटने का अपेक्षाकृत सरल मामला है ... मुझे आशा है कि इससे मदद मिलती है! लेकिन मुझे उम्मीद है कि एक बेहतर तरीका है, मैंने इसे कभी नहीं मिला है। –