代码之家  ›  专栏  ›  技术社区  ›  Organiccat

在剑道网格选择功能的自定义下拉列表中选择项目

  •  1
  • Organiccat  · 技术社区  · 6 年前

    我有一个kendogrid,我想选择一个与所选项目不同的项目。我知道,这个用例听起来很奇怪,但其想法是弹出一个窗口,询问用户“确定吗?”分配此新项目之前。

    如果单击“否”,则会将其分配给原始项目。如果选择“是”,则会设置新项目。

    以下是基本设置:

    $('<input id="uniqueIDYo">')
    .appendTo(container)
    .kendoDropDownList({
        autoBind: true,
        dataTextField: 'Name',
        dataValueField: 'Id',
        filter: 'contains',
        template: `blahblahblah`,
        dataSource: {
            data: data.models
        },
        select: function(evt) {
            if (/* ask user question here = yes */) {
                // cool, set the value
            } else {
                // THE QUESTION: How do I set the selected value back?
            }
    

    问题是,我不知道如何在这里设置值。我找到的唯一部分解决方案是立即放弃evt。preventDefault()位于select函数的顶部。这并不理想,因为如果用户回答“是”,我确实希望更改值。

    1 回复  |  直到 6 年前
        1
  •  1
  •   David Lebee    6 年前

    我希望这有帮助

    这里是它的道场: https://dojo.telerik.com/OqORUJES

    以及代码

    <select id="my-select"></select>
    <script>
        let people = [{
                id: 1,
                fullname: 'David Lebee'
            },
            {
                id: 2,
                fullname: 'Chuck Norris'
            },
        ];
    
        function confirmAsync(success, fail) {
            setTimeout(() => {
                if (confirm('are you sure')) {
                    success();
                } else {
                    fail();
                }
            });
        }
    
        $('#my-select').kendoDropDownList({
            dataTextField: 'fullname',
            dataValueField: 'id',
            dataSource: {
                data: people
            },
            select: function(e) {
                let selectedItem = e.dataItem;
                let widgetInstance = e.sender;
                let id = e.dataItem.get(widgetInstance.options.dataValueField);
                e.preventDefault();
                confirmAsync(function() {
                    widgetInstance.value(id);
                }, function() {
                    // nothing to do because of prevent default. 
                });
            }
        });
    </script>