获取Kendo下拉列表的选定对象

SL *_*Dev 6 kendo-ui angularjs

我正在使用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>
Run Code Online (Sandbox Code Playgroud)

我的控制器有以下几点:

$scope.selectedSport = null;
$scope.sports: [
  { id: 1, name: 'Basketball' },
  { id: 2, name: 'Football' },
  { id: 3, name: 'Tennis' }
];

$scope.send = function () {
  alert($scope.selectedSport);
};
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我获得selectedSport ID.但是,我想要整个对象.我发现的每个其他StackOverflow帖子都会检索ID.对于我的生活,我无法弄清楚如何获得对象.有谁知道如何获取所选的JSON对象而不仅仅是id?

谢谢!

Lar*_*ner 9

对于当前版本的Kendo Angular绑定,这个答案可能已经过时了.正如hally9k的回答中所提到的,现在有一个属性k-ng-model可以处理这个,所以你会使用

k-ng-model="selectedSport"
Run Code Online (Sandbox Code Playgroud)

代替

ng-model="selectedSport"
Run Code Online (Sandbox Code Playgroud)

以前的答案如下; 如果您使用的是较旧版本的Kendo UI,这可能会或可能不会相关:

我不认为你可以配置kendo小部件dataItem直接存储- 在它下面所有仍然是<select>一个原始值.所以你可能必须从widget的数据源中获取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>
Run Code Online (Sandbox Code Playgroud)

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);
    };
}
Run Code Online (Sandbox Code Playgroud)

但是,您可以为kendoDropDownList创建自己的指令,该指令使用k-data-item属性(例如)并像这样使用它:

HTML:

<select id='date' k-ddl k-data-source="sports" k-data-text-field="name" k-data-item="dataItem">
Run Code Online (Sandbox Code Playgroud)

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);
    };
}
Run Code Online (Sandbox Code Playgroud)

这样,您可以使控制器不受Kendo UI DataSource特定代码的影响,而只能使用JS数据类型.(见JSBin)


hal*_*y9k 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'" />
Run Code Online (Sandbox Code Playgroud)

  • 实际上,如果你仍然需要将id绑定到模型变量,你可以使用:k-data-value-field ="'id'"k-ng-model ="selectedSport"ng-model ="sportId".这样你就可以 - 你可以使用你需要的东西. (3认同)