我一直在试图找出正在发生的事情,但是还没有。
请查看下面的代码。这是一个不一致的行为,所以我很难抓住触发它的原因。该网格位于弹出窗口中,当我刷新页面并尝试使用它时,我注意到它在第一次尝试时可以正常工作。然后,我保存/取消弹出窗口,并继续重复执行,在某些时候失败,并开始累积空行。
我尝试使用来检查网格的值
$('#gridFldListItems')。data(“ kendoGrid”)。dataSource.data()
它显示没有数据,但是只要单击“添加新记录”,它就会显示2。
它不一定会在第二次尝试时失败,但是它永远不会在第一次尝试时失败。我怀疑每次打开弹出窗口时,它不一定都是空的(经过前几次尝试),并且它携带了先前尝试的一些数据。我可能是错的。
当我单击“添加新记录”时,它将添加具有空值的行,并为我提供了在第二行中输入的选项。
我也输入项目名称并单击更新时,它不会触发“创建”事件,如下所示:
这时网格破裂了。这是网格的代码
var grid = $("#gridFldListItems").kendoGrid({
editable: {
"confirmation": "Are you sure you want to delete this item?",
"mode": "inline",
"createAt": "bottom"
},
selectable: true,
autoBind: false,
toolbar: ["create" ],
columns: [
{ field: 'Item' },
{
command: ['edit', 'destroy',
{ iconClass: "k-icon k-i-arrow-up", click: $.proxy(this, 'selectedFieldDef_onClkMoveUp'), name: 'Up' },
{ iconClass: "k-icon k-i-arrow-down", click: $.proxy(this, 'selectedFieldDef_onClkMoveDown'), name: 'Down' }], title: ' '
}
],
dataSource: this.selectedFieldDef_dsItems,
}).data("kendoGrid");
selectedFieldDef_dsItems: new kendo.data.DataSource({
transport: {
read: function (e) {
var field = editViewModel.get("selectedFieldDef");
var mapItems = $.map(field.Items, function (item, idx) {
return {
Item: item
};
});
//on success
e.success(mapItems);
},
create: function (e) {
// on success
e.success(e.data);
},
update: function (e) {
// on success
e.success();
},
destroy: function (e) {
var vm = editViewModel;
// locate item in original datasource and remove it
var field = vm.get("selectedFieldDef");
if (field.DefaultValue && !vm.selectedFieldDef_dsItemsFindItem(vm.selectedFieldDef_dsItems.data(), field.DefaultValue)) {
field.DefaultValue = null;
vm.set("selectedFieldDef", field);
$("#inpFldRegex").kendoDropDownList().data("kendoDropDownList").trigger("change");
}
// on success
e.success();
}
},
error: function (e) {
alert("Status: " + e.status + "; Error message: " + e.errorThrown);
},
schema: {
model: {
id: "Item",
fields: {
Item: { editable: true, nullable: true }
}
}
}
})
任何帮助将不胜感激。
更新: 刷新页面时效果很好