Kendoui ListView удаляет строку в режиме редактирования

У меня проблема с просмотром списка kendouis: если я редактирую строку, другая удаляется из прикрепленного источника данных. Это отлично работает, когда я редактирую первую строку, но когда я редактирую другую, первая удаляется.

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

Вот код:

var dataSource = new kendo.data.DataSource({

  transport: {
     read: function (options) {    
     options.success(lst);
  },
  update: function (options) {
      oThis.httpService.Post('api/DynamicPricing/UpdateDynamicItem', lst)
                            .success(function (data, status) {    
                                options.success(data);
                            });    
                    },
                schema: {
                    model: {
                        id: "Id",
                        fields: {
                            Name: { type: "string" },
                            CategoryF: { type: "string" },
                            DirectCost: { type: "number" },
                            IndirectCost: { type: "number" },
                            StrategyType: { type: "string" },
                            Value: { type: "string" },
                            OverridePrice: { type: "number" },
                            Current: { type: "string" }
                        }
                    }
                }
            });

            list = $('#listcontent').kendoListView({
                template: kendo.template('<table cellpadding="3px" class="gridDynamicPricingContent"><tr> \
                                            <td width="100px">#:Name#</td> \
                                            <td width="100px">#:CategoryF#</td> \
                                            <td width="100px" align="right">#:DirectCostF#</td> \
                                            <td width="100px" align="right">#:IndirectCostF#</td> \
                                            <td width="100px">#:StrategyType#</td> \
                                            <td width="50px">#:Value#</td> \
                                            <td width="100px" style="text-align:right; padding-right:5px;" >#:OverridePriceF#</td> \
                                            <td width="100px">#:Current#</td > \
                                            <td width="100px"><a class="k-button  k-edit-button" href = "\\#"><span class="k-icon k-edit"></span></a></td>\
                                         </tr></table>'),
                editTemplate: kendo.template('<table class="gridDynamicPricingContent k-state-selected"><tr> \
                                            <td width="100px">#:Name#</td> \
                                            <td width="100px">#:CategoryF#</td> \
                                            <td width="100px" align="right">#if(DynamicPricingType==5){# #:data.DirectCost# #}else{#<input type="number" style="width:60px;" class="k-textbox" data-bind="value:DirectCost" name="DirectCost" />#}#</td> \
                                            <td width="100px" align="right">#:IndirectCost#</td> \
                                            <td width="100px">#:StrategyType#</td> \
                                            <td width="50px">#:Value#</td> \
                                            <td width="100px" style="text-align:right; padding-right:5px;">#if(DynamicPricingType==4 || DynamicPricingType==5){#<input type="number" class="k-textbox" style="width:60px;" data-bind="value:OverridePrice" name="OverridePrice" />#}else{# #:data.OverridePrice# #}#</td> \
                                            <td width="100px">#:Current#</td > \
                                            <td width="100px"><a class="k-button k-button-icontext k-update-button" href="\\#"><span class="k-icon k-update"></span></a></td> \
                                         </tr></table>'),
                dataSource: dataSource,
                selectable: true,
                dataBound: function () {
                    $('#listcontent').prepend(header);
                }    
            });//.data("kendoListView");

person Haris    schedule 05.11.2014    source источник
comment
Что возвращает API/DynamicPricing/UpdateDynamicItem? Обновляется только один элемент или весь список всех элементов?   -  person CodingWithSpike    schedule 06.11.2014
comment
он возвращает все элементы, и это не имеет значения, потому что обновление не вызывается.   -  person Haris    schedule 10.11.2014


Ответы (1)


Я думаю, ваша основная проблема в том, что у вас есть schema внутри вашего transport, в dataSource.transport.schema, но это должно быть dataSource.schema. Таким образом, DataSource не видит указанную вами schema.model. Без модели он не знает, что такое поле Id, а без этого он, вероятно, хочет создавать новые записи при редактировании, а не обновлять их.


Другая возможная проблема может заключаться в том, что для schema.model.id установлено значение Id, но у вас нет этого поля в списке полей в schema.model.fields. Я бы добавил Id в поля.


Другая проблема заключается в том, что Kendo DataSource ожидает, что сервер вернет 1 обновленный элемент с соответствующим идентификатором, а не весь список элементов. Если вы не можете изменить сервер так, чтобы он возвращал только 1 элемент, вы можете изменить логику в своей функции transport.update, чтобы вызывать options.success() только с массивом, содержащим 1 обновленный элемент.


В ваших шаблонах также используются DirectCostF, IndirectCostF и DynamicPricingType, которых нет в вашем schmea.model.fields.


Я не смог воспроизвести ваши запросы к серверу, но я сделал jsFiddle, который использует локальные данные здесь: http://jsfiddle.net/rally25rs/Lo41dzwp/1/

person CodingWithSpike    schedule 10.11.2014