у формы extjs 4 все еще есть набор записей после form.reset (); - PullRequest
5 голосов
/ 13 октября 2011

У меня есть сетка, привязанная к форме. Действие отправки формы - обновить загруженную запись, если она есть, и добавить новую запись, если она пустая.но если я сначала выберу запись, а затем вызову

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

, чтобы очистить форму, чтобы я мог добавить новую запись, она перезаписывает ранее выбранную запись обновлением.

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

mustn't myform.getRecord ();быть нулевым после сброса?как очистить выбор записи?

Ответы [ 4 ]

3 голосов
/ 30 октября 2013

Для всех, кто заинтересован, вы можете переопределить панель форм по умолчанию, чтобы добавить функциональность для очистки полей формы.Добавьте следующее в ваш код:

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

Затем вы можете очистить форму, используя:

myForm.clearForm()

Где myForm - панель вашей формы.

3 голосов
/ 13 октября 2011

Короче говоря, нет, это не должно, и у вас нет законных подходов для очистки записи после первой загрузки чего-либо с помощью 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);
},

На самом деле это единственные методы Ext.form.Basic (экземпляркоторый возвращается getForm()), имеющим дело с полем this._record.

Что касается сброса

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

Как вы могли видеть, сброс не имеет ничего общего сзапись, возвращаемая getRecord(), это просто сброс значений поля.

2 голосов
/ 15 сентября 2015

Это то, что вы ищете:

form.getForm().reset(true);

True для отмены привязки любой записи, установленной loadRecord.

См. Ext.form.Basic.reset () синтаксис

0 голосов
/ 28 июля 2012

Я нахожу этот вопрос, потому что у меня похожий сценарий, но немного другой:

  • ExtJS 4.1.1
  • TreePanel

В ExtJS 4.1 в методе sync () вы можете использовать объект параметров, в котором вы можете определить функции обратного вызова, успеха и сбоя. Поскольку я уверен, что синхронизирую только одну запись, я загрузил возвращенную запись:

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

Немного поздно, но надежда помогает тебе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...