Обновление Extjs6 не очищает грязный флаг

У меня есть представление, содержащее 2 сетки. Сетки поддерживаются 2 моделями. Отношения между двумя моделями - один ко многим (ассоциация без ключа).

Модели:

Ext.define('TestApp.model.association.Project', {
    extend: Ext.data.Model,
    fields: [
        {
            type: 'int',
            name: 'id'
        }, {
            type: 'string',
            name: 'project'
        }, {
            type: 'number',
            name: 'allocation'
        }, {
            type: 'string',
            name: 'comments'
        }, {
            type:'string',
            name:'state'
        }
    ]
});


Ext.define('TestApp.model.association.User', {
    extend: Ext.data.Model,
    fields: [{
        type: 'int',
        name: 'id'
    }, {
        type: 'string',
        name: 'employee'
    }, {
        type: 'string',
        name: 'location'
    }, {
        type: 'string',
        name: 'department'
    }, {
        type: 'string',
        name: 'manager'
    }, {
        type: 'number',
        name: 'allocation'
    }],
    hasMany: [{
        model: 'TestApp.model.association.Project',
        // Note: use of 'role' is preferred over 'name'
        role: 'projects',
        // Define role for inverse association
        inverse: {
            role: 'user'
        }
    }]
});

После того, как я редактирую одну строку из дочерней части, я устанавливаю родительскую запись как грязную (dirty=true), а затем синхронизирую хранилище. После выполнения необходимой работы на сервере я отправляю ответ. После того, как я получу ответ, грязный флаг на дочерней части останется верным.

При отсутствии ассоциации, после получения ответа от сервера, грязный флаг сбрасывается автоматически.

Я создал скрипку для более подробной информации.

Как очистить грязный флаг от ассоциации после обновления?

Изменить

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

  • Выберите запись John Doe на верхней панели.
  • Выберите Apple на нижней панели
  • Редактировать столбец выделения и комментариев (доступен плагин редактирования строк). Нажмите Ок
  • Нажмите кнопку Сохранить на панели инструментов второй сетки.

Запрос отправляется на сервер. Сервер отвечает json (ответ сервера жестко запрограммирован и всегда будет одинаковым).

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

Почему делает это? Это ошибка?


person florin    schedule 27.09.2017    source источник
comment
Зависите ли вы от сервера для установки грязного флага, или вы можете закодировать его для установки грязного флага для родительского-потомка.   -  person Tejas    schedule 28.09.2017
comment
@Tejas1991 Tejas1991 Я не совсем понял твое заявление. Я отправляю json на сервер, содержащий изменения. Сервер отвечает json, содержащим запись после того, как она была сохранена в базе данных. Это приложение для отдыха. Грязное состояние устанавливается на клиенте после внесения некоторых изменений   -  person florin    schedule 28.09.2017
comment
Почему вы программно не устанавливаете грязный флаг поля вместо того, чтобы устанавливать для него данные сервера? Сделайте одну вещь, можете ли вы рассказать мне о своем коде, где вы устанавливаете данные сервера   -  person Tejas    schedule 28.09.2017
comment
@Tejas1991 Tejas1991 На стороне сервера у меня есть загрузочное приложение Spring. После получения изменений я сохраняю их в БД. В ответ возвращаю измененную запись.   -  person florin    schedule 28.09.2017
comment
Грязный флаг устанавливается в true, когда поле originalValue!=currentValue, поэтому в этом случае я думаю, что вы должны проверить после того, как данные будут установлены в поле, а затем каково его исходное значение.   -  person Tejas    schedule 29.09.2017


Ответы (1)


При настройке ассоциаций все связанные модели должны принадлежать к одной и той же схеме. В связи с этим я внес некоторые изменения в ваш код. Проверьте, работает ли сейчас кнопка Сохранить. Я также прокомментировал некоторые части вашего кода для первоначального тестирования.

Найдите код здесь

person Amita Suri    schedule 28.09.2017
comment
Я попробовал ваше предложение, добавив базовую модель, содержащую схему. Это не работает. Мне нужен закомментированный код, потому что он сохраняет полезную нагрузку моего запроса по мере необходимости. - person florin; 29.09.2017