我在手动设置/删除Kendo网格控件上的“脏标志”指示器时遇到问题。
我已将教程扩展到preserve dirty indicators,以便在value
事件期间在dataSource.change
字段中包含其他验证:
value
(其中包含id
)已被修改为0 - 此 是有效的“脏标志”(e.items[0].id > 0 && e.items[0].value === 0
)value
的值大于0 - 此 是有效的“脏标志”(e.items[0].value > 0
)value
的任何其他实例不是有效的“脏标志”,因此应删除value
字段设为“空白”,即“空”,请将值修改为0(if (!e.items[0].value) {e.items[0].value = 0;}
)应用这些更改后,change
事件现在如下所示:
change: function (e) {
if (e.action == "itemchange") {
if ((e.items[0].id > 0 && e.items[0].value === 0) || e.items[0].value > 0) {
e.items[0].dirtyFields = e.items[0].dirtyFields || {};
e.items[0].dirtyFields[e.field] = true;
_dirty = true;
}
else {
if (!e.items[0].value) {
e.items[0].value = 0;
}
e.items[0].dirty = false;
e.items[0].dirtyFields = e.items[0].dirtyFields || {};
e.items[0].dirtyFields[e.field] = false;
}
$("#grid").data("kendoGrid").refresh();
}
}
进行这些更改后,我可以看到dirtyField
函数(值列的template
)被触发,还可以看到相应的true
/ {{1提供的值和适当的返回(我认为应该从适当的单元格中设置/删除“脏标志”):
false
但是,在修改网格中的另一个单元格之前,不会删除“脏标志”。
这是展示问题的Dojo example。为了复制:
function dirtyField(data, fieldName){
if(data.dirty && data.dirtyFields[fieldName]){
return "<span class='k-dirty'></span>"
}
else{
return "";
}
}
单元格中输入大于0的值(设置“脏标志”)value
单元格中的值(“脏标志”仍为 - &gt;现在应根据value
事件逻辑消失)change
单元格中输入大于0的值(在当前单元格上设置“脏标志”,从第二行value
单元格中删除“脏标志”)答案 0 :(得分:2)
在网格单元格关闭之前调用您的DataSource.change
事件。因此,刷新网格和单元格更改未在UI中正确反映。
您应该将网格刷新移动到网格cellClose
事件。然后在单元格关闭后调用网格刷新,一切正常。
$("#grid").kendoGrid({
dataSource: dataSource,
sortable: true,
pageable: true,
navigatable: true,
height: 400,
columns: [
{ field: "value", title: "Value", editor: decimal_NumberEditor, format: '{0:n2}', attributes: { class: "editable-cell" }, template: "#=dirtyField(data,'value')# #:value#" }],
editable: true,
cellClose: function(e) {
$("#grid").data("kendoGrid").refresh();
}
});
以下是事件记录的工作示例,以便更好地了解正在发生的事情。请参阅JS控制台: