2011-09-14 21 views
5

में एक फॉर्म + ग्रिड सबमिट करना मेरे पास एक Ext.form.Panel है जिसमें ग्रिड में प्रत्येक पंक्ति को संपादित करने के लिए एक ग्रिड और कुछ टेक्स्ट फ़ील्ड हैं। यह इस तरह के समान है: http://dev.sencha.com/deploy/ext-4.0.2a/examples/writer/writer.html, केवल इतना है कि कोई AJAX शामिल नहीं है; मेरा डेटा स्टोर स्थानीय है।ExtJS 4

मैं मानक पोस्ट के माध्यम से ग्रिड की पंक्तियों को कैसे सबमिट कर सकता हूं?

  1. ग्रिड की पंक्तियों को संपादित करने की पुष्टि की जा रही है के लिए खेतों:

    मैं बस myForm.submit() करते हैं, वहाँ दो मुद्दे हैं। फॉर्म जमा करते समय उन्हें अनदेखा किया जाना चाहिए।

  2. ग्रिड से कोई डेटा सबमिट नहीं किया जा रहा है।

एकमात्र समाधान मैं देख रहा हूँ किसी भी तरह से सत्यापित किया जा रहा क्षेत्रों रोकने के लिए और कुछ छिपा प्रत्येक पंक्ति के डेटा वाले क्षेत्रों बनाने के लिए है। क्या कोई बेहतर विकल्प है?

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

+0

यह बिल्कुल स्पष्ट नहीं है कि आपका क्या मतलब है ... हो सकता है कि आप अपने फॉर्म का नमूना दें जिसे आप सबमिट करने का प्रयास कर रहे हैं। और ग्रिड को अनदेखा किया जाता है क्योंकि सबमिट केवल उन फ़ील्ड को संसाधित करता है जिनके नाम – nscrob

+0

असाइन किए गए हैं, मैंने कुछ संपादन किए हैं। मुझे आशा है कि यह अब थोड़ा स्पष्ट है। मैंने जो समाधान इस्तेमाल किया है, मैंने भी जोड़ा है। – liviucmg

उत्तर

8

यहाँ समाधान मैं प्रयोग किया जाता है:

  1. सबमिट करने के बाद फार्म से कुछ क्षेत्रों की अनदेखी के लिए, मैं getFields overwritted है() प्रपत्र की विधि। गंदा, मुझे पता है। नीचे दिए गए कोड में, 'ignoreInMainForm' संपत्ति वाले फ़ील्ड को अनदेखा कर दिया जाएगा।

    Ext.getCmp('myForm').getForm().getFields = function() { 
        var fields = this._fields; 
        if (!fields) { 
         var s = [], 
         t = this.owner.query('[isFormField]'); 
         for (var i in t) { 
          if (t[i]['ignoreInMainForm'] !== true) { 
           s.push(t[i]); 
          } 
         } 
         fields = this._fields = Ext.create('Ext.util.MixedCollection'); 
         fields.addAll(s); 
        } 
        return fields; 
    } 
    
  2. ग्रिड के डेटा प्रस्तुत करने के लिए, मैं एक भी JSON ऑब्जेक्ट है कि मैं फार्म के baseParams में जोड़ने में सभी पंक्तियों को सांकेतिक शब्दों में बदलना।

    var myItems = myStore.getRange(); 
    var myJson = []; 
    for (var i in myItems) { 
        myJson.push({ 
         'a': myItems[i].get('a'), 
         'b': myItems[i].get('b'), 
         ... 
        }); 
    } 
    Ext.getCmp('formHiddenId').setValue(Ext.encode(myJson)); 
    
1

कि आंशिक रूप से मेरे लिए काम किया - ExtJS 4.0.2a में, मैं baseParams को जोड़ सकते हैं नहीं है, इसलिए बजाय मैं के लिए भेजें हैंडलर चालू होने के बजाय कार्य करें:

function prepareToSendForm(a, b) { 
var myItems = Ext.getCmp('grid-links').store.getRange(); 
var myJson = []; 
for (var i in myItems) { 
    myJson.push({ 
     'title': myItems[i].get('title'), 
     'url': myItems[i].get('url'), 
     'refreshes': myItems[i].get('refreshes') 
    }); 
} 

//Update the hidden field to be the JSON of the Grid 
for (var i=0, len=Ext.getCmp('roomCreateForm').getForm()._fields.items.length; i<len; i++) { 
    var item = Ext.getCmp('roomCreateForm').getForm()._fields.items[i]; 
    if (item.name=='roomLinks') { 
     Ext.getCmp('roomCreateForm').getForm()._fields.items[i].inputEl.dom.value=Ext.encode(myJson); 
     break; 
    } 
} 

Ext.getCmp('roomCreateForm').submit(); 
} 

कौन सा काम किया एक आकर्षण झूठ (लेकिन बहुत प्लग-एंड-प्ले नहीं है)। मुझे फ़ॉर्म में एक छिपी हुई फ़ील्ड (उपरोक्त रूमलिंक नाम दिया गया) बनाना था, और उपरोक्त लूप के लिए दूसरा यह पाया गया है कि JSONed परिणामों के साथ मान को प्रतिस्थापित करता है।

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