Этот ответ, вероятно, устарел для текущих версий угловых привязок Kendo. Как уже упоминалось в ответ hally9k, есть теперь атрибут k-ng-model, который может справиться с этим, так что вы будете использовать
k-ng-model="selectedSport"
вместо
ng-model="selectedSport"
Предыдущий ответ ниже; это может или не может по-прежнему иметь важное значение в случае, если вы используете старую версию Кендо UI:
Я не думаю, что вы можете настроить кендо виджет для хранения dataItem
непосредственно - под все это еще <select>
с примитивным значением. Поэтому вам, вероятно, придется получить dataItem из источника данных виджетов, например. как это:
HTML:
<div ng-controller="MyController">
<select id='myDropDownList' kendo-drop-down-list ng-model="selectedSport" k-data-source="sports" k-data-value-field="'id'" k-data-text-field="'name'"></select>
<button ng-click='send()'>Submit</button>
</div>
JS:
function MyController($scope) {
$scope.selectedSport = null;
$scope.sports = new kendo.data.DataSource({
data: [{
id: 1,
name: 'Basketball'
}, {
id: 2,
name: 'Football'
}, {
id: 3,
name: 'Tennis'
}]
});
$scope.send = function() {
var dataItem = $scope.sports.get($scope.selectedSport);
console.log(dataItem);
};
}
Вы можете, однако, создать свою собственную директиву kendoDropDownList, которая использует k-data-item
атрибут (например) и использовать его как это :
HTML:
<select id='date' k-ddl k-data-source="sports" k-data-text-field="name" k-data-item="dataItem">
JS:
var app = angular.module('Sample', ['kendo.directives']).directive("kDdl", function() {
return {
link: function (scope, element, attrs) {
$(element).kendoDropDownList({
dataTextField: attrs.kDataTextField,
dataValueField: "id",
dataSource: scope[attrs.kDataSource],
change: function() {
var that = this;
var item = that.dataItem();
scope.$apply(function() {
scope[attrs.kDataItem] = item.toJSON();
});
}
});
}
};
});
function MyController($scope) {
$scope.sports = [{
id: 1,
name: 'Basketball'
}, {
id: 2,
name: 'Football'
}, {
id: 3,
name: 'Tennis'
}];
$scope.dataItem = $scope.sports[0];
$scope.send = function() {
console.log($scope.dataItem);
};
}
Таким образом, вы могли бы держать контроллер свободный от Кендо UI DataSource специфичного кода, и вместо того, чтобы работать только с типами данных JS. (См JSBin)
Не могли бы вы рассказать мне, откуда взялся метод «получить»? –
@SLDev http://docs.kendoui.com/api/framework/datasource#methods-get –
Не могли бы вы проверить код на JSBin, потому что текущий пример работает неправильно, может быть, последняя версия от angular-kendo.js был изменен ? –