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

 孩子气zyj2 发布于 2023-02-10 15:20

我正在使用Kendo下拉列表.更具体地说,我正在使用Kendo Angular指令.目前,我的标记中有以下内容:



我的控制器有以下几点:

$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?

谢谢!

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

    k-ng-model="selectedSport"
    

    代替

    ng-model="selectedSport"
    

    以前的答案如下; 如果您使用的是较旧版本的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>
    

    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)

    2023-02-10 15:22 回答
  • 使用k-ng-model将绑定dataItem而不仅仅是文本值:

    <input id='myDropDownList' kendo-drop-down-list k-ng-model="selectedSport" k-data-source="sports" k-data-text-field="'name'" />
    

    2023-02-10 15:24 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有