javascript - 在 ExtJS 4 中提交表单 + 网格

标签 javascript web-applications extjs extjs4

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

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

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

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

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

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

提前致谢!

最佳答案

这是我使用的解决方案:

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

关于javascript - 在 ExtJS 4 中提交表单 + 网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7419295/

相关文章:

javascript - 如何使用 jQuery 选择和单击

css - 无法在 Extjs 中为 chrome 动态应用背景面板图像

javascript - 在 React.js 中设置组件状态时遇到问题

javascript - 视觉 : global v-directive working in one component but not another

php - Apache JMeter 不执行 HTML 页面中的 Javascript

javascript - 使用 JSON 作为数据库的最佳方式?

javascript - 为什么这个 JavaScript 函数会产生这样的输出?

javascript - Logo 在移动设备上变大(Javascript)

javascript - 在 EXTjs 4 中显示包含 'partial'/'nested' 小部件的 View

ExtJS 6 在内存代理中使用自定义过滤器功能