Kendo ComboBox with template bug
Selection by keyboard navigation work but selection by mouse click does not close the cell and when you click off it erases the selection. Pressing ESC after mouse selection maintains the data.
by siliconsoul
HTML
<script src="http://knockoutjs.com/downloads/knockout-2.0.0.debug.js"></script>
<link rel="stylesheet" href="http://rniemeyer.github.com/knockout-kendo/css/kendo.common.min.css">
<link rel="stylesheet" href="http://rniemeyer.github.com/knockout-kendo/css/kendo.default.min.css">
<script src="http://cdn.kendostatic.com/2013.1.319/js/kendo.all.min.js"></script>
<script src="https://rawgithub.com/SteveSanderson/knockout.mapping/master/build/output/knockout.mapping-latest.debug.js"></script>
<script src="http://rniemeyer.github.io/knockout-kendo/js/knockout-kendo.min.js"></script>
<div id="majorCodeGrid" data-bind="kendoGrid:{
data: $data.Estimates,
dataSource: {
batch: true,
schema: {
model: {
id: 'Id',
fields: {
Id: { editable: false, nullable: false },
MajorCode: {editable: true }
}
}
}
},
height: 250,
editable: 'incell',
navigatable: true,
columns: [{
field: 'MajorCode.Code',
title: 'Major Code',
attributes: { style: 'max-width: 150px'},
template: function(detail) { return detail.MajorCodeTemplate(); },
editor: function(container, options) {
return options.model.MajorCodeEditor(container, options);
}
}]
}">/</div>
JavaScript
var PageViewModel = function (data, lookups) {
var estimates = this;
var mapping = {
'Estimates': {
key: function (model) {
return ko.utils.unwrapObservable(model.Id);
},
create: function (options) {
return new EstimateViewModel(options.data, true);
}
}
};
ko.mapping.fromJS(data, mapping, estimates);
return this;
};
var EstimateViewModel = function(data, mapThis) {
var estimate = this;
if (mapThis) {
ko.mapping.fromJS(data, {}, estimate);
}
};
EstimateViewModel.prototype = {
MajorCodeEditor: function (container, options) {
$('<input id="majorCodeDD" data-bind="value: MajorCode" style="width: 100%"/>')
.appendTo(container)
.kendoComboBox({
placeHolder: 'Select Major Code..',
dataTextField: 'Code',
dataValueField: 'Id',
dataSource: majorCodes,
autoBind: true,
suggest: true,
filter: "startswith"
});
},
MajorCodeTemplate: function () {
var code = this.HasMajorCode() ? this.MajorCode.Code : 'Select Major Code..';
return '<span>' + code + '</span>';
},
HasMajorCode: function () {
return this.MajorCode !== null && (this.MajorCode.Id != NullMajorCode.Id);
}
};
var majorCodes = [{"Id":"ecdb3506-dea0-4965-9f7b-ec9f6f75b113","Code":"13111","Description":"FCP - Prospect"},{"Id":"879fbc83-de0c-467f-b66d-3cc3ceaf10d8","Code":"13112","Description":"FCP - Leasehold"},{"Id":"7ea641a1-f380-43ce-b8f2-6a2cb0b9f5bf","Code":"13121","Description":"FCP - Geo"},{"Id":"4bd6ed20-40df-4c77-9e59-4bae47d35fa7","Code":"13131","Description":"FCP - Drill"}];
var NullMajorCode = {
Id: '00000000-0000-0000-0000-000000000000',
Code: '',
Description: ''
};
var pageViewData = {"Estimates" :[{"Id":"4bd6ed20-40df-4c77-9e59-4bae47d35fa7", "MajorCode":...