【问题标题】:KendoUI AutoComplete widget does not update filter when emptyKendoUI AutoComplete 小部件在为空时不更新过滤器
【发布时间】:2014-06-17 21:11:20
【问题描述】:

我有一个自动完成小部件绑定到这样的数据源:

<input data-filter="contains" data-role="autocomplete" data-bind="source: styleData" data-text-field="style" id="style-name" />

我在数据源中有以下项目:

  • ABC123
  • 123AC
  • ZZZ

当我在“自动完成”框中键入 A 时,它会按预期自动过滤掉最后一项。然后如果我点击 B,第二个项目也被过滤掉。如果我然后按退格键,第二个项目会重新出现。然而,使用最后的退格键,第三项不会出现。 $('#style-name').getKendoAutoComplete() 的值解析为空字符串,但数据源的过滤器仍然列出了 {field: 'style', logic: 'contains', value: 'A'}

我在 Windows 8.1 Update 1 上的 Firefox 30 和 IE11 上进行了测试,结果都一样。

【问题讨论】:

    标签: javascript filter kendo-ui kendo-datasource kendo-autocomplete


    【解决方案1】:

    这是因为

    data-min-length="1"
    

    此属性仅在您至少输入一个字符时触发自动完成。

    如果您想显示所有结果而不是最少 1 个字符,那么您可能正在寻找一个 ComboBox。

    【讨论】:

    • 对不起,我补充说,在它不工作后,希望当盒子的长度低于指定值时它会自动清除或其他东西。删除它并不能解决问题。我已经更新了原始问题以反映这一点。我也不想要一个组合框,因为最终会有数百条记录,我不需要用户实际选择一个选项,部分仍然应该过滤数据。
    【解决方案2】:

    所以我花了一些时间仔细阅读源代码,我猜这个功能的目的是由搜索功能中的以下几行(kendo.autocomplete.js,2014 年第一季度,第 301 行)表明的:

    if (!length) {
        that.popup.close();
    } else if (length >= that.options.minLength) {
        that._open = true;
    
        that._filterSource({
            value: ignoreCase ? word.toLowerCase() : word,
            operator: options.filter,
            field: options.dataTextField,
            ignoreCase: ignoreCase
        });
    }
    

    !length of 0 计算结果为 true 并在不更改过滤器的情况下关闭弹出窗口。我打算将 _filterSource 行移到条件之外来解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      • 2019-09-17
      相关资源
      最近更新 更多