2011-09-14 53 views
5

我有一個Ext.form.Panel包含一個網格和一些文本字段,用於編輯網格中的每一行。它與此非常相似:http://dev.sencha.com/deploy/ext-4.0.2a/examples/writer/writer.html,只是沒有涉及AJAX;我的數據存儲是本地的。在ExtJS中提交一個表格+網格4

如何通過標準POST提交網格的行?

如果我只是做myForm.submit(),有兩個問題:

  1. 編輯網格的行正在驗證的領域。提交表單時應忽略它們。

  2. 沒有提交來自電網的數據。

我看到的唯一解決方案是以某種方式防止字段被驗證並創建一些包含每行數據的隱藏字段。有沒有更好的選擇?

預先感謝您!

+0

目前尚不清楚您的意思......可能會提交您想要提交的表單樣本。並且網格被忽略,因爲只提交了名爲 – nscrob

+0

的進程表單字段我做了一些編輯。我希望現在更清楚一點。我還添加了我使用的解決方案。 – liviucmg

回答

8

這是我所使用的溶液:

  1. 對於忽略來自形式在提交某些字段,我已經overwritted的getFields()的形式的方法。討厭的,我知道。在下面的代碼中,具有'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. 提交網格的數據,我在編碼,我在窗體的baseParams添加一個JSON對象中的所有行。

    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(); 
} 

哪工作說謊魅力(但不是非常即插即用)。我必須在表單中創建一個隱藏字段(上面命名爲roomLinks),而上面的第二個for循環找到並用JSONed結果替換值。