我有一个 Ext.form.Panel,其中包含一个网格和一些用于编辑网格中每一行的文本字段。它与此非常相似:http://dev.sencha.com/deploy/ext-4.0.2a/examples/writer/writer.html ,只是没有涉及 AJAX;我的数据存储在本地。
如何通过标准 POST 提交网格的行?
如果我只是做 myForm.submit(),有两个问题:
正在验证用于编辑网格行的字段。提交表单时应忽略它们。
没有提交来自网格的数据。
我看到的唯一解决方案是以某种方式阻止验证字段并创建一些包含每一行数据的隐藏字段。有没有更好的选择?
提前致谢!
最佳答案
这是我使用的解决方案:
为了在提交时忽略表单中的某些字段,我覆盖了表单的 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; }
为了提交网格的数据,我将所有行编码到我添加到表单的 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/