Сетка rowedit с синхронизацией

Я пытаюсь реализовать общую сетку редактирования строк, как в этом примере, с той разницей, что я хотел бы синхронизировать изменения с серверной частью. До сих пор я могу добавить новую строку с onRoweditAdd,

Ext.define('Mb.view.base.RoweditListController', {
    extend: 'Ext.app.ViewController',
    alias: 'controller.roweditlist',
    onRoweditAdd: function(me){
        var grid = me.up('panel'),
            edit = grid.editingPlugin,
            store = grid.getStore(),
            record = store.getModel().create({id: 0});
        edit.cancelEdit()
        store.insert(0, record)
        edit.startEdit(record, 0)
    },
    editRowedit: function(editor, ctx) {
        var store = ctx.grid.getStore();
        store.sync()
    }
})

Проблема в том, что store.sync() не отправляет create запрос к серверу, но update запрос. Это выглядит как store.insert(0, record) не учитывается. Синхронизируется только модификация, выполненная пользователем. Что может быть виновником?

3 ответа

Решение

Давая существующий id В записи ExtJS предполагает, что эта запись уже существует в вашем магазине и должна быть обновлена. Если вы не дадите идентификатор, тогда он предполагает, что это вновь созданная запись, и пойдет по пути создания. Это исходит из предположения о том, что вы используете сгенерированную стратегию идентификации (что вам обычно следует), и, таким образом, вы никогда не предоставите идентификаторы самостоятельно при создании.

ExtJS помечает запись как фантомную: true или false. Фантомные записи - это те, которые существуют только во внешнем интерфейсе и еще не были сохранены. Создание записи без id помечает ее как фантомную, тогда как создание записи с уже предоставленным идентификатором не помечает ее как фантомную и не инициирует вызов create, а вместо этого выполняет обновление

К сожалению, я не смог создать скрипку, которая воспроизводит проблему.

Я решил это, изменив эту строку:

record = store.getModel().create({id: 0});

в

record = store.getModel().create({});

Проблема связана с новой реализацией идентификаторов записей, начиная с ExtJs 5. Но я не могу это объяснить...

Создание новой записи с id: 0 больше не должен поддерживаться в ExtJs 6.

Я нашел это в Ext.data.ModelidProperty используется как уникальный ключ для идентификации записи. По умолчанию имеетid набор полей. Если вы предоставите дубликат, то это вызовет проблему в store,

Это описание написано в ExtJS doc

The data values for this field must be unique or there will be id value collisions in the Ext.data.Store.
Defaults to:
'id'

Пожалуйста, обратитесь ссылку

Другие вопросы по тегам