我有一个Kendo UI网格,它在单列上进行了行内编辑。编辑时,该列应使用日期选择器作为输入。
但是,在设置日期选择器的值之后,然后返回到相同的行/列,则日期不会显示在日期选择器输入中。
我创建了一个Dojo来显示我的意思: https://dojo.telerik.com/eJEmoVEv/4
答案 0 :(得分:1)
在剑道上绑定绑定总是很棘手。我对您的demo进行了一些更改:
编辑器:
在使用data-bind
时,您不必处理小部件的状态。剑道应该自己处理它,但是您需要告诉剑道使用kendo.bind(element, model)
(bind()
docs)处理它。因此,您无需设置data-value
属性。
function commentEditor(container, options) {
var datePicker = $('<input data-role="datepicker" data-format="dd/MM/yyyy" type="date" name="Comment" data-bind="value:Comment">');
datePicker.appendTo(container);
kendo.bind(datePicker, options.model);
}
Comment
字段类型:
为了使kendo知道如何将Comment
字段值作为日期进行处理并将其正确设置为窗口小部件,您需要在模型定义中设置正确的数据类型:
Comment: { type: "date", editable: true }
模板:
对模板的小修正:
template: function (dataItem) {
if (dataItem.Comment != "") {
let date = kendo.parseDate(dataItem.Comment);
if (date) {
return kendo.toString(date, "dd/MM/yyyy");
}
}
return (dataItem.Comment || "");
}
我通过检查Comment
结果来确保parseDate
的内容是有效日期。如果无效,请继续执行另一种情况,以验证Comment
不是null
,undefined
等,如果是,则打印一个空字符串。
希望对您有帮助。
更新
不知道为什么,但是kendo似乎将所选值作为字符串保存到bound属性。我已将此处理程序添加到似乎起作用的小部件的change
事件中:
datePicker.data("kendoDatePicker").bind("change", function(e) {
let model = this,
widget = e.sender;
model.Comment = widget.value();
}.bind(options.model));
这将强制Comment
属性为Date
类型。
答案 1 :(得分:1)
在@DontVoteMeDown的帮助下,我终于找到了答案。 日期选择器期望Comment字段为日期类型,因此添加kendo.parse然后重新设置comment字段可以解决此问题。
查看更新的剑道道场:https://dojo.telerik.com/eJEmoVEv/4
id