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(),则有两个问题:
正在验证用于编辑网格行的字段.提交表单时应忽略它们.
没有提交来自网格的数据.
我看到的唯一解决方案是以某种方式阻止字段被验证,并创建一些包含每行数据的隐藏字段.还有更好的选择吗?
先感谢您!
这是我使用的解决方案:
为了在提交时忽略表单中的某些字段,我已经覆盖了表单的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)为了提交网格的数据,我在单个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)