Сетка Extjs 4 выводится пустой после сохранения модели - PullRequest
0 голосов
/ 04 января 2012

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

Слева от сеток есть панель форм, которая используетсядля редактирования записей сетки, когда я нажимаю на запись в сетке, в форме отображаются соответствующие данные.Я могу редактировать данные, но когда я нажимаю кнопку сохранения, которая запускает действие 'model'.save (), соответствующая строка сетки становится пустой и появляется грязный флаг.Я проверил модель, и атрибут «данные» не содержит никаких данных, кроме идентификатора, данные присутствуют в атрибуте «изменено».

Я прочитал, что красный грязный флаг означает, что данные нет 'т сохраняется в бэк-энде, но в этом случае это так.Запрос возвращается с кодом состояния 200 и успешным: true.

Метод onSave от контроллера:

onSave : function() {
    // Get reference to the form
    var stepForm = this.getStepForm();

    this.activeRecord.set( stepForm.getForm().getValues() );

    this.activeRecord.save();

    console.log( this.activeRecord );
}

Хранилище шагов:

Ext.define( 'Bedrijfsplan.store.Steps', {
    extend : 'Ext.data.Store',

    require : 'Bedrijfsplan.model.Step',

    model : 'Bedrijfsplan.model.Step',

    autoSync : true,

    proxy : {
        type : 'rest',

        url : 'steps',

        reader : {
            type : 'json',

            root : 'steps'
        },

        writer : {
            type : 'json',

            writeAllFields : false,

            root : 'steps'
        }
    }
} );

Модель шага:

Ext.define( 'Bedrijfsplan.model.Step', {
    extend : 'Ext.data.Model',

    fields : [ 'id', 'section_id', 'title', 'information', 'content', 'feedback' ],

    proxy : {
        type : 'rest',

        url : 'steps',

        successProperty : 'success'
    }
} );

Шаг сетки

Ext.define( 'Bedrijfsplan.view.step.Grid', {
    extend : 'Ext.grid.Panel',

    alias : 'widget.stepsgrid',

    hideHeaders : true,

    border : false,

    columns : [ {
        header : 'Titel',

        dataIndex : 'title',

        flex : 1
    } ]
 } );

Я провожу пару часов в поисках и попытках, но до сих пор не нашел решения.Была бы признательна за помощь в этом вопросе:)

Ответы [ 2 ]

0 голосов
/ 05 января 2012

Код обновления вашей модели: this.activeRecord.set (stepForm.getForm (). GetValues ​​());

Должно работать, но я могу попробовать разбить его на две строки и установить точку останова, чтобы убедиться, чтоgetValues ​​() возвращает то, что вы ожидаете.

Также убедитесь, что у вас установлен атрибут name для каждого поля в вашей форме и что он точно соответствует именам полей в вашей модели.

Наконец, лучше вызывать .sync () для магазина, чем .save () для модели, когда вы работаете с моделью, которая принадлежит магазину.При выборе опции autoSync: true в магазине это происходит автоматически каждый раз, когда вы делаете корректное обновление для одной из его моделей.

Методы BasicForm.loadRecord и BasicForm.updateRecord обеспечивают хорошую оболочку для функциональности, которую вы 'ищите, что может работать лучше:

onRowSelected: function(activeRecord) {
    stepForm.getForm().loadRecord(activeRecord);
}

onSaveClick: function() {
    var activeRecord = stepForm.getForm().getRecord();
    stepForm.getForm().updateRecord(activeRecord);
    activeRecord.store.sync();
}
0 голосов
/ 04 января 2012

Единственная странность, которую я вижу, связана с вашей: this.activeRecord.set( stepForm.getForm().getValues() );

Я всегда использовал .set() в магазине, никогда не записывая.например:

myDataStore.set( stepForm.getForm().getValues() );
...