【问题标题】:Show Message When DataSource Returns Empty for a Kendo ComboBox当数据源为 Kendo 组合框返回空时显示消息
【发布时间】:2018-01-23 14:51:13
【问题描述】:

在使用 Kendo MVC Helper 控件时,我正在使用 JavaScript (JS) 管理表单的其他方面。我有一个对 Kendo DropDown 控件的 JS 引用,该控件将“搜索文本”传递给 API 调用。显然,搜索文本可能不会返回任何结果。

如果没有返回结果,我想显示一条消息(和/或做其他事情)。但是,我无法找到要使用的正确事件。

这些是唯一“看起来”对此有用的事件:

  • CHANGE:仅在数据存在且更改下拉选项时触发
  • DATABOUND:仅在 API 数据存在时触发

问题:
使用 JavaScript,API 调用返回空数据集时如何显示消息?

我将继续添加一些代码...尽管您不需要它来回答这个特定问题。

示例标记:

<div class="input-group input-group-sm" style="width: 600px">
    <span class="input-group-addon input-sm text-align">Search</span>
    @(Html.Kendo().ComboBox()
          .Name("ddlMeter")
          .Filter("contains")
          .Placeholder("Type Meter Name or Number...")
          .DataTextField("Text")
          .DataValueField("Value")
          .AutoBind(false)
          .MinLength(4)
          .DataSource(source => source.Read(read => read.Action("findmeter", "rtf", new { area = "documents" }))
            .ServerFiltering(true))
          .HtmlAttributes(new { style = "width:100%;" }))
</div>

JAVASCRIPT 示例:
这只是一个示例控制器...

函数页面控制器(选项){

var that = this,
    empty = {},
    dictionary = {
        elements: {
            form: null,
            ddlMeter: null,
        },
        instances: {
            ddlMeter: null
        },
        selectors: {
            form: 'form',
            ddlMeter: '#ddlMeter'
        }
    };

var initialize = function (options) {
    that.settings = $.extend(empty, $.isPlainObject(options) ? options : empty);

    // Elements
    dictionary.elements.form = $(dictionary.selectors.form);
    dictionary.elements.ddlMeter = $(dictionary.selectors.ddlMeter, dictionary.elements.form);

    // Kendo Objects
    dictionary.instances.ddlMeter = dictionary.elements.ddlMeter.data('kendoComboBox');

    // Events
    dictionary.instances.ddlMeter.bind('change', that.on.change.ddlMeter);
    dictionary.instances.ddlMeter.bind('dataBind', that.on.databind.ddlMeter);
};

this.on = {
    change: {
        ddlMeter: function (e) {
            // This only fires if they CHANGE the controls choice on an existing dataset
        },
    databind: {
        ddlMeter: function (e) {
            // This wont do it if the set is empty
        }
    },
};

initialize(options);

};

【问题讨论】:

    标签: javascript jquery kendo-ui


    【解决方案1】:

    我认为您需要改用RequestEnd 事件。如果我没记错的话,您可以使用以下语法获取事件内部数据源的句柄:

    this.dataSource.data();
    

    .DataSource(source => source.Read(read => read.Action("findmeter", "rtf", new { area = "documents" }))
        .Events(e=>e.RequestEnd("requestEnd"))
        .ServerFiltering(true))
    

    【讨论】:

    • 'DataBound' 不起作用。但是“EndRequest”确实如此。你的回答引导我走向它......所以如果你更新你的答案以反映这个链接,我会将你的答案标记为正确。 docs.telerik.com/kendo-ui/api/javascript/data/…
    • 该事件在数据源上而不是在组合框上。
    • 我知道......但它有效。我可以看到 ComboBox 级别没有事件(实际上有效)。谢谢你的想法。
    猜你喜欢
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 2014-10-15
    • 2015-12-20
    相关资源
    最近更新 更多