情况: 我扩展了一个网格,并添加了一个onkeydown事件来监听选项卡或箭头,这将允许用户转到下一个“可编辑”单元格。我这样做是用......
var grid = $("#" + that.gridId).data('kendoMyExtension');
grid.closeCell(currentCell);
grid.editCell(desiredCell);
当前行为: 它按预期工作,但是当单元格关闭时,它不会将数据(通过正确的绑定)持久保存到它所绑定的ViewModel.Field。 ...但是,在进行更改后,您点击了输入,您将保留更改。
我尝试了什么: 在我使用
进行焦点更改(并关闭所有其他剑道编辑好东西)之前手动进行更新{grid Context}
that.saveRow();
that.dataSource.sync();
然而,这些不起作用。并且通常最终会在剑道的某处投掷一个未定义的错误。
我想要的是什么:
理想情况下,剑道将提供至少一个MVVM和剑道扩展示例(对于网格),其中包含所有功能,事件等...但是..因为我可能不会在这里询问我会解决for:
对此网格上的显示逻辑还有很多其他修改。我正在使用模板来确定单元格是否应该是可编辑的,一个模板来确定应该在nonedit&中呈现的内容。编辑模式,以及一些IOC逻辑将其连接到扩展...(仅供参考)
答案 0 :(得分:1)
o.k。通过剑道踩到后我发现问题......我的数据源没有读卡器(并且它不应该是afik)因此同步和saveRow将无法可靠地工作。
您必须确保该行在编辑模板中标记为“k-edit-row”:
{your edit template selector}.closest('tr').addClass("k-grid-edit-row");
如果你想让saveRow工作,但是在我的情况下它是不可靠的(只有当我通过代码时才会起作用,否则每次都会失败...我不知道为什么甚至尝试过流行的'setTimeout(...)'....) 最终这就是我最终做的事情:
myOnKeyDown:function(e){
var cell = $(e.target).closest("td")[0];
var row = $(e.target).closest("tr")[0];
if (cell != undefined) {
that.forceSync(cell, row, e.target.value);
}
},
forceSync: function (cell, row, value){
/// this is in the extension scope /////
/// Note that this uses functions in the dataSource Scope! ///
var cellFieldName = cell.kendoBindingTarget.target.options.fields.field;
var cellRecordUid = row.getAttribute('data-uid');
var that = $("#" + this.gridId).data('kendoMyExtension').dataSource, idx, length;
var data = that._flatData(that._data);
for (idx = 0, length = data.length; idx < length; idx++) {
if(data[idx].uid ===cellRecordUid){
data[idx][cellFieldName] = value;
}
}
},
......经过相当长的一段时间后,我觉得别人应该受益......
真的希望它可以帮助其他人.. -cheers。