2011-10-13 26 views
5

Tôi có một lưới liên kết với một biểu mẫu hành động gửi biểu mẫu là cập nhật bản ghi đã tải nếu có và thêm bản ghi mới nếu biểu mẫu trống của nó. nhưng nếu tôi chọn một bản ghi trước và sau đó gọiextjs 4 hình thức vẫn còn có hồ sơ thiết lập sau khi form.reset();

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

để xóa biểu mẫu để tôi có thể thêm bản ghi mới, ghi đè bản ghi đã chọn trước đó với bản cập nhật.

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

không nên myform.getRecord(); được null sau khi đặt lại? làm cách nào để xóa lựa chọn bản ghi?

+0

thể trùng lặp của [reset Mẫu Ghi Không Xoá Values ​​- ExtJS 4.2] (http://stackoverflow.com/questions/18988727/reset-form-record-not-clearing-values-extjs -4-2) –

Trả lời

3

Tóm lại, không, không nên và bạn không có phương pháp pháp lý để xóa hồ sơ sau lần đầu tiên bạn tải bất cứ điều gì qua loadRecord.
Mặc dù, bạn vẫn có thể thực hiện nhiệm vụ myform.getForm()._record = null, tôi sẽ phản đối mạnh mẽ điều đó vì nó có thể phá vỡ một số chức năng nội bộ của ExtJS.

Dưới đây là một chiết xuất từ ​​ExtJS API:

getRecord(): Ext.data.Model
Trả về cuối Ext.data.Model dụ đó đã được nạp qua loadRecord

Và nó thực hiện chính xác điều đó, trả về bản ghi cuối cùng được tải qua loadRecord.

Dưới đây là một số nguồn tin:

getRecord: function() { 
    return this._record; 
}, 

loadRecord: function(record) { 
    this._record = record; 
    return this.setValues(record.data); 
}, 

Trên thực tế, đó là những phương pháp duy nhất của Ext.form.Basic (một ví dụ trong số đó được trả về bởi getForm()) đối phó với this._record lĩnh vực.

Đối với reset

reset: function() { 
    var me = this; 
    me.batchLayouts(function() { 
     me.getFields().each(function(f) { 
      f.reset(); 
     }); 
    }); 
    return me; 
}, 

Như bạn có thể thấy, thiết lập lại không có gì để làm với các bản ghi trả về bởi getRecord(), nó chỉ đặt lại giá trị trường.

+0

Cảm ơn lời giải thích! Tôi đã thêm một trường ẩn cho recordID thay vào đó và Ill xác minh loại đệ trình tôi có cho dù trường id có được đặt hay không. – Early73

+0

Điều này không còn giá trị. Xem câu trả lời của câu hỏi http://stackoverflow.com/questions/18988727/reset-form-record-not-clearing-values-extjs-4-2 –

0

Tôi tìm thấy câu hỏi này bởi vì tôi có một kịch bản tương tự nhưng hơi khác nhau:

  • ExtJS 4.1.1
  • TreePanel

Trong ExtJS 4.1 đồng bộ() phương pháp bạn có thể sử dụng một tùy chọn đối tượng mà bạn có thể định nghĩa một hàm gọi lại, thành công và thất bại. Vì tôi chắc chắn rằng tôi chỉ đồng bộ hóa một bản ghi, tôi đã tải bản ghi đã trả về:

me.getHelpItemsStore().sync({ 
    success: function(batch) { 
     // We expect single operation so... 
     var record = batch.operations[0].getRecords()[0]; 
     form.loadRecord(record); 
    } 
}); 

Ít trễ nhưng hy vọng sẽ giúp bạn.

2

Đối với bất kỳ ai quan tâm, bạn có thể ghi đè bảng điều khiển biểu mẫu mặc định để thêm chức năng xóa trường biểu mẫu.Thêm những điều sau đây để mã của bạn:

 Ext.override(Ext.form.Panel, { 
     clearForm:function(){ 
      Ext.each(this.getForm().getFields().items, function(field){ 
        field.setValue(''); 
      }); 
     } 
    }); 

Sau đó bạn có thể xóa một hình thức sử dụng:

myForm.clearForm()

đâu myForm là bảng mẫu của bạn.

2

Đây là những gì bạn đang tìm kiếm:

form.getForm().reset(true); 

Đúng như unbind bất cứ hồ sơ do loadRecord.

Xem Ext.form.Basic.reset() cú pháp

Các vấn đề liên quan