在ExtJS 4中提交表单+网格

liv*_*cmg 5 javascript extjs web-applications extjs4

我有一个包含网格和一些文本字段的Ext.form.Panel,用于编辑网格中的每一行.它非常类似于:http://dev.sencha.com/deploy/ext-4.0.2a/examples/writer/writer.html,只是没有涉及AJAX; 我的数据存储是本地的.

如何通过标准POST提交网格行?

如果我只是执行myForm.submit(),则有两个问题:

  1. 正在验证用于编辑网格行的字段.提交表单时应忽略它们.

  2. 没有提交来自网格的数据.

我看到的唯一解决方案是以某种方式阻止字段被验证,并创建一些包含每行数据的隐藏字段.还有更好的选择吗?

先感谢您!

liv*_*cmg 8

这是我使用的解决方案:

  1. 为了在提交时忽略表单中的某些字段,我已经覆盖了表单的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;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  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 ));
    
    Run Code Online (Sandbox Code Playgroud)