После обновления записи через store.sync () в Ext JS 4 запись удваивается - PullRequest
1 голос
/ 15 декабря 2011

Мой json-store содержит одну запись.Эта запись загрязнена после изменения поля и правильно после store.sync () отправляется запрос POST с действием = обновление и данными записи в теле.

На стороне сервера я фиксирую обновление и отправляю обратнозапись (с успехом: true) в том виде, как она была отправлена ​​изначально (все поля включены).

После этого магазин удвоил запись, что означает, что в магазине теперь две (2) идентичные записи (один и тот же идентификатор и т. д.).).

Я поиграл со всеми возможными вариантами (root [on / off], idProperty (set / unset) и т. Д.), Эффект всегда один и тот же.

Любая подсказкачто я делаю не так?

Ответы [ 3 ]

3 голосов
/ 16 декабря 2011

Я видел ту же проблему, и моя теория состоит в том, что совпадение идентификатора в возвращенной записи не происходит должным образом.То, что я имею в виду под этим, на мой взгляд, тип idProperty должен быть, например, int, а не строкой или чем-то подобным.Я не смог доказать это, так или иначе, но у меня есть обходной путь.Вот как я «справился» с этой проблемой:

1).Не отправляйте обратно данные, просто отправьте сообщение об успехе.
2).Снимите флажок «грязный» вручную с помощью следующего слушателя магазина:

listeners : {
            write: function(store, operation, opts){
                console.log('request wrote!');
                //workaround to sync up store records with just completed operation
                Ext.each(operation.records, function(record){
                    if (record.dirty) {
                        record.commit();
                    }
                    /*if (record.phantom) {
                        record.phantom=false;
                    }*/
                });
                store.load();
            },
            delay: 2000
        }

РЕДАКТИРОВАТЬ : я задал этот вопрос некоторое время назад на форумах премиум-класса, и я получил ответ, что он долженработать, и вот пример, который должен доказать это.http://pastebin.com/z3gekQDn Обратите внимание на отображение идентификатора в модели.

2 голосов
/ 15 декабря 2011

Убедитесь, что ваш сервер возвращает массив записей. Если у вас есть только одна запись, поместите ее в массив и отправьте обратно.

Проверьте это демо с Firebug.

0 голосов
/ 19 декабря 2011

Я наконец нашел причину описанного неправильного поведения.В моей модели я переписал конструктор так:

constructor: function(config) {
    this.callParent([config]);
},

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

...