Почему Kendo DataSource, использующий пользовательский метод для связи с конечной точкой, всегда отправляет один и тот же объект для удаления?

У меня есть Kendo Grid, где я использую специальные методы для связи с сервером. Эти методы реализованы с использованием Restangular.

Я могу без проблем добавлять (создавать новые) объекты столько, сколько захочу.

Сценарий 1:

  • Откройте страницу
  • нажмите на кнопку "Удалить" в строке - она ​​использует встроенную команду "уничтожить"
  • запись будет удалена
  • выберите другую строку и нажмите кнопку «Удалить»
  • ошибка, потому что Кендо отправляет набор данных первой попытки, а не второй
  • если я перезагружу страницу, все работает нормально

Сценарий 2:

  • удалить запись (если она первая после обновления страницы, то работает нормально)
  • добавить новую запись
  • результат: запись будет добавлена, и будет дополнительный вызов удаления на сервер, содержащий те же данные, которые я отправил на предыдущем шаге

Свойства источника данных:

Что я сделал до сих пор:

  • Я прочитал несколько вопросов и ответов здесь и на форуме Telerik, но нет ничего полезного.

Я предполагаю, что проблема может заключаться в том, что сервер возвращает что-то отличное от ожидаемого источником данных Kendo. Моя конечная точка службы возвращает HttpStatusCode.Accepted (202), и данные не прикреплены. Но я не могу найти информацию об их ожиданиях в Telerik. Не говоря уже о том, что не определено, что должно возвращаться после удаления.

Кто-нибудь встречался с этой проблемой и решил ее? Кто-нибудь знает, что источник данных Telerik ожидает вернуть с сервера после удаления?


person AndrasCsanyi    schedule 16.04.2016    source источник


Ответы (1)


В документации я обнаружил, что пустой ответ обрабатывается как успех в случае обновления. Более того, я передал результат удаления в e.success(), и это вызвало странное поведение.

private destroyModuleScreen( e: kendo.data.DataSourceTransportOptions ): kendo.data.DataSourceTransportOptions {

            var contract: IKendoModuleScreenContract = <IKendoModuleScreenContract>( e.data.models[0] );

            this.moduleScreensService.deleteModuleScreen( contract ).then(( result: any ) => {
                e.success();

                //wrong
                //e.success(result.plain());
            }, ( reason ): any => {
                e.error( reason );
            });

            return e;
        }
person AndrasCsanyi    schedule 16.04.2016