Javascript Kendoui ListView在编辑模式下删除行
我对kendouis的listview有一个问题,即如果我编辑一行,另一行将从附加的数据源中删除。当我编辑第一行时,这可以正常工作,但当我编辑另一行时,第一行将被删除 我注意到,在编辑第一行listview时,首先调用edit函数,但当我编辑第二行数据绑定时,会调用databound,然后调用edit 以下是代码:Javascript Kendoui ListView在编辑模式下删除行,javascript,jquery,kendo-ui,kendo-listview,Javascript,Jquery,Kendo Ui,Kendo Listview,我对kendouis的listview有一个问题,即如果我编辑一行,另一行将从附加的数据源中删除。当我编辑第一行时,这可以正常工作,但当我编辑另一行时,第一行将被删除 我注意到,在编辑第一行listview时,首先调用edit函数,但当我编辑第二行数据绑定时,会调用databound,然后调用edit 以下是代码: var dataSource = new kendo.data.DataSource({ transport: { read: function (options)
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");
我认为您的主要问题是,您的模式在传输中,位于dataSource.transport.schema,但它应该是dataSource.schema。因此,数据源看不到指定的schema.model。没有模型,它不知道Id字段是什么,如果没有它,它可能希望在编辑时创建新记录,而不是更新它们 另一个可能的问题可能是schema.model.id设置为id,但schema.model.fields中的字段列表中没有该字段。我会在字段中添加Id 另一个问题是Kendo数据源希望服务器返回1个更新的项目,并带有匹配的ID,而不是整个项目列表。如果无法将服务器更改为仅返回1个项目,则可以使用包含1个更新项目的数组将transport.update函数中的逻辑更改为仅调用options.success 您的模板还使用了不在schmea.model.fields中的DirectCostF、IndirectCostF和DynamicPricingType
我无法复制您的服务器请求,但我制作了一个使用本地数据的JSFIDLE:api/DynamicPricing/UpdateDynamicItem”返回什么?只更新一个项目,还是所有项目的整个列表?它返回所有项目,并且它是无关的,因为不调用update。