Работа с привязками на кендо всегда сложна. Я обновил вашу демо с некоторыми изменениями:
Редактор:
Когда вы используете 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
тип поля:
Чтобы кендо узнало, как обрабатывать значение поля 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
и т. Д., Если да, печатает пустую строку.
Надеюсь, это поможет.
Обновление
Не знаю почему, но кажется, что кендо сохраняет выбранное значение в виде строки в привязанном свойстве. Я добавил этот обработчик в событие change
виджета, которое, кажется, работает:
datePicker.data("kendoDatePicker").bind("change", function(e) {
let model = this,
widget = e.sender;
model.Comment = widget.value();
}.bind(options.model));
Обновленная демоверсия
Это заставляет свойство Comment
иметь тип Date
.