extjs 4表单在form.reset()之后仍然有记录集;

时间:2011-10-13 02:48:39

标签: extjs

我有一个绑定到表单的网格,表单提交操作是更新已加载的记录(如果有)并添加新记录(如果它是空白表单)。但如果我先选择一条记录然后再打电话

myGrid.getSelectionModel().deselectAll();
myform.getForm().reset(); 

清除表单,以便我可以添加新记录,并用更新覆盖以前选择的记录。

record = myform.getRecord();
if(record){
record.set(values);
}

不应该是myform.getRecord();重置后为空?如何清除记录选择?

4 个答案:

答案 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)

这就是你要找的东西:

form.getForm().reset(true);

为取消绑定loadRecord设置的任何记录时为真。

请参阅Ext.form.Basic.reset()语法

答案 3 :(得分:0)

我发现这个问题是因为我有类似的情况但略有不同:

  • ExtJS 4.1.1
  • TreePanel中

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

迟到但希望对你有帮助。