2
我在手动设置/删除Kendo网格控件上的“脏标志”指示灯时遇到了问题。网格“脏”标志没有更新
我已经扩展了教程preserve dirty indicators以包括dataSource.change
事件期间对value
字段附加验证:
- 以前保存
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
)被触发,并且还可以看到正在提供的适当值和正确的返回值(我认为应该设置该值/删除相应单元格中的“脏标志”):
function dirtyField(data, fieldName){
if(data.dirty && data.dirtyFields[fieldName]){
return "<span class='k-dirty'></span>"
}
else{
return "";
}
}
但是,“脏标志”不会被删除,直到网格中的另一个单元格被修改。
这是一个Dojo example来演示这个问题。为了复制:
- 输入一个大于0的值到第二行
value
小区(设置“脏标志”) - 来自第二行
value
小区删除值(“脏标志”保留 - >现在应该基于change
事件逻辑)消失 - 输入一个大于0的值到第三行
value
细胞(套“脏标志”上当前小区,从第二行value
小区)
感谢@sasha_gud,演示工作正常。出于某种原因,我似乎无法触发我的网格定义上的'cellClose()'事件。你知道这是否是一个版本问题('cellClose'仅适用于特定版本)/作为一个冲突的网格属性? **编辑**更改您发送的演示中控件的版本以匹配我自己的版本,并且确实与控件的版本有关。 – Sandman