我正在使用Kendo下拉列表。更具体地说,我正在使用Kendo Angular指令。目前,我的标记中包含以下内容:
<input id='myDropDownList' kendo-drop-down-list ng-model="selectedSport" k-data-source="sports" k-data-text-field="'name'" />
<button ng-click='send()'>Submit</button>
我的控制器有以下内容:
$scope.selectedSport = null;
$scope.sports: [
{ id: 1, name: 'Basketball' },
{ id: 2, name: 'Football' },
{ id: 3, name: 'Tennis' }
];
$scope.send = function () {
alert($scope.selectedSport);
};
当我运行此代码时,我获得了selectedSport ID。但是,我想要整个对象。我发现的每个其他StackOverflow帖子都会检索ID。对于我的生活,我无法弄清楚如何获得对象。有谁知道如何获取所选的JSON对象而不仅仅是id?
谢谢!
答案 0 :(得分:9)
对于当前版本的Kendo Angular绑定,这个答案可能已经过时了。 正如hally9k的回答中提到的,现在有一个属性k-ng-model可以处理这个问题,所以你可以使用
k-ng-model="selectedSport"
取代
ng-model="selectedSport"
上面的答案如下;如果您使用较旧版本的Kendo UI,这可能会或可能不会相关:
我认为您不能将kendo小部件配置为直接存储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);
};
}
这样,您可以使控制器不受Kendo UI DataSource特定代码的影响,而只能使用JS数据类型。 (见JSBin)
答案 1 :(得分:5)
使用k-ng-model将绑定dataItem而不仅仅是文本值:
<input id='myDropDownList' kendo-drop-down-list k-ng-model="selectedSport" k-data-source="sports" k-data-text-field="'name'" />
答案 2 :(得分:0)
我知道这是一个老问题,但你可以使用下拉列表的select事件来获取底层的json对象:
select: function (e) {
var item = this.dataItem(e.item.index());
...
}
然后,您将从select事件中存储json对象(上面的项变量),以便您可以从submit方法获取它。可能有一种方法可以获取所选的json对象,而不必使用select事件。
答案 3 :(得分:0)
获取文本值的正确方法是使用Kendos下拉列表中的“k-select”事件:
nil
然后在你的角度控制器中公开'test'函数(例子假设你使用'controller as vm'):
<select kendo-drop-down-list k-select="vm.test" k-data-text-field="'groupName'" k-data-value-field="'id'" k-data-source="vm.groupList" ng-model="vm.groupId"></select>
我希望有所帮助。