我有一个绑定到表单的网格,表单提交操作是更新已加载的记录(如果有)并添加新记录(如果它是空白表单)。但如果我先选择一条记录然后再打电话
myGrid.getSelectionModel().deselectAll();
myform.getForm().reset();
清除表单,以便我可以添加新记录,并用更新覆盖以前选择的记录。
record = myform.getRecord();
if(record){
record.set(values);
}
不应该是myform.getRecord();重置后为空?如何清除记录选择?
答案 0 :(得分:3)
简而言之,不,它不应该,并且在您第一次通过loadRecord
加载任何内容后,您没有合法的方法来清除记录。
虽然,您仍然可以进行myform.getForm()._record = null
分配,但我强烈反对,因为它可能会破坏ExtJS的一些内部功能。
以下是ExtJS API的摘录:
getRecord():Ext.data.Model
加载的
返回最后一个Ext.data.Model实例 通过loadRecord
确实如此,返回通过loadRecord
加载的最后一条记录。
以下是一些消息来源:
getRecord: function() {
return this._record;
},
loadRecord: function(record) {
this._record = record;
return this.setValues(record.data);
},
实际上,这些是处理this._record
字段的Ext.form.Basic
(其中一个实例由getForm()
返回)的唯一方法。
至于重置
reset: function() {
var me = this;
me.batchLayouts(function() {
me.getFields().each(function(f) {
f.reset();
});
});
return me;
},
正如您所看到的,重置与getRecord()
返回的记录无关,它只是重置字段值。
答案 1 :(得分:3)
对于任何感兴趣的人,您可以覆盖默认表单面板以添加清除表单字段的功能。将以下内容添加到您的代码中:
Ext.override(Ext.form.Panel, {
clearForm:function(){
Ext.each(this.getForm().getFields().items, function(field){
field.setValue('');
});
}
});
然后您可以使用以下方式清除表单:
myForm.clearForm()
myForm
是您的表单面板。
答案 2 :(得分:2)
答案 3 :(得分:0)
我发现这个问题是因为我有类似的情况但略有不同:
在ExtJS 4.1 in sync()方法中,您可以使用options对象,您可以在其中定义回调,成功和失败函数。因为我确定我只是同步一条记录,所以我加载了返回的记录:
me.getHelpItemsStore().sync({
success: function(batch) {
// We expect single operation so...
var record = batch.operations[0].getRecords()[0];
form.loadRecord(record);
}
});
迟到但希望对你有帮助。