2011-05-04 7 views
6

से एक फॉर्मपेल का निर्माण कर रहा हूं, मैं डेटास्टोर रिकॉर्ड से एक ExtJs FormPanel को गतिशील रूप से पॉप्युलेट करने की कोशिश कर रहा हूं। जब उपयोगकर्ता ग्रिडपैनल में एक पंक्ति पर क्लिक करता है, तो बिल्डफॉर्म विधि को कॉल किया जाता है और क्लिक किए गए रिकॉर्ड को पहले तर्क के रूप में भेजा जाता है।ExtJs गतिशील रूप से एक डेटास्टोर रिकॉर्ड

नीचे कोड (जब डीबगिंग) काम करता प्रतीत होता है, लेकिन doLayout विधि का कोई प्रभाव नहीं पड़ता है।

क्या कोई मुझे सही दिशा में इंगित कर सकता है?

mymodule = Ext.extend(Ext.FormPanel, { 
    forceLayout: true, 
    initComponent: function() { 
     Ext.applyIf(this, { 
      id: Ext.id(), 
      labelWidth: 75, 
      defaultType: 'textfield', 
      items: [{ 
       layout: 'form', 
       items: [{ 
        fieldLabel: 'test', 
        xtype: 'textfield' 
       }, { 
        fieldLabel: 'test', 
        xtype: 'textfield' 
       }] 
      }] 
     }); 
     mymodule.superclass.initComponent.call(this); 
    }, 
    buildForm: function (record, c) { 
     var form = this.getForm(); 

     var formItems = new Ext.util.MixedCollection(); 

     Ext.each(record.fields.items, function (item) { 
      formItems.add(new Ext.form.TextField({ 
       labelStyle: 'width:100px', 
       fieldLabel: item.name, 
       name: item.dataIndex, 
       id: 'field-' + item.name 
      })); 
     }, this); 

     form.items = formItems; 

     this.doLayout(false, true); 

     form.loadRecord(record); 
    } 
}); 

उत्तर

5

फॉर्म में घटकों को जोड़ने का सही तरीका add() विधि का उपयोग करना होगा। यदि आपका फॉर्म पहले से ही प्रस्तुत किया गया है, तो add() विधि का उपयोग करें और फिर doLayout() पर कॉल करें। उस मामले में क्या आइटम हटाने के लिए सही तरीका है में

form.add(formItems); 
form.doLayout(false,true); 
form.loadRecord(record); 
+0

धन्यवाद,:

तो आप इस प्रयास करना चाहें? जैसा कि मुझे फॉर्म को पहले – Dve

+0

को साफ़ करने की आवश्यकता है, आप फ़ॉर्म से घटकों को हटाने के लिए 'निकालें() 'या' removeAll() 'विधियों का उपयोग कर सकते हैं –

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