ExtJs. JsonStore.insert () вызывает исключение - PullRequest
0 голосов
/ 13 января 2011

У меня есть EditorGridPanel с кнопкой на панели инструментов для добавления новых записей. Все отлично работает, кроме одного сценария. Когда я пытаюсь вставить запись, которая уже существует в базе данных, сервер отправляет обратно:

{"success":false,"message":"already exists","data":{}}

, но grid создает новую строку, отмеченную красным треугольником. Если после этого я пытаюсь вставить новую запись (даже если она не существует в базе данных), все отлично работает на стороне сервера, но я получаю «неперехваченное исключение» в firebug. Там написано:

'uncaught exception: Ext.data.DataReader: #realize was called with invalid remote-data. Please see the docs for DataReader#realize and review your DataReader configuration.'

почему это?

EDIT Я обнаружил, что:

Когда я пытаюсь вставить новую запись, я использую метод вставки, который отправляет почтовый запрос с параметром data на сервер (кодирование - true, список - true):

data    [{"Name":"123"}]

и он получает с сервера:

{"success":true,"data":{"PositionId":"eef1d9f3-9fdf-4b87-9f6c-ef42231f4fed","Name":"123"}}

после этого я пытаюсь создать предмет с таким же именем:

data    [{"Name":"123"}]

так я получаю:

{"success":false,"message":"already exists","data":{}}

с сервера.

В следующий раз, когда я пытаюсь создать нужный элемент, магазин отправляет массив с 2 элементами

data    [{"Name":"1234"},{"Name":"123"}]

но сервер создает только первый (самый новый) элемент и отправляет обратно:

{"success":true,"data":{"PositionId":"1ff05c7f-d5fc-41cd-81f3-faabc225b2a6","Name":"1234"}}

Таким образом, ошибка может произойти, потому что хранилище просит сервер создать 2 элемента, но только один отправляется обратно.

Так как с этим бороться? Можно ли сделать так, чтобы магазин больше не отправлял запрос на неудачный товар?

1 Ответ

0 голосов
/ 13 января 2011

попробуйте отключить функцию автосохранения в Магазине.

    this.store = new Ext.data.Store({
        id: 'store'
        ,autoSave: false 
        ,autoLoad: true
        ,writer: writer,  
        ,proxy: proxy
        ,reader: reader
        scope       : this
    });

см. Пример для получения дополнительной информации http://dev.sencha.com/deploy/dev/examples/writer/writer.html

...