【问题标题】:Explanation of Typeahead.js substringMatcher functionTypeahead.js substringMatcher 函数说明
【发布时间】:2015-11-24 17:01:10
【问题描述】:

我只是对Typeahead.js 进行一些研究,它是一个非常酷的库。由于文档也非常好,我已经设法获得了一个基本示例。

但是我试图弄清楚下面的代码块实际上在做什么?

var substringMatcher = function(strs) {
  return function findMatches(q, cb) {
    var matches, substringRegex;

    // an array that will be populated with substring matches
    matches = [];

    // regex used to determine if a string contains the substring `q`
    substrRegex = new RegExp(q, 'i');

    // iterate through the pool of strings and for any string that
    // contains the substring `q`, add it to the `matches` array
    $.each(strs, function(i, str) {
      if (substrRegex.test(str)) {
        matches.push(str);
      }
    });

    cb(matches);
  };
};

在示例中,它是在将预输入初始化为source 选项时传入的。我可以理解它从文本框中获取输入并将其与数据集进行比较,但我对 qcb 是什么感到有点困惑?

【问题讨论】:

    标签: javascript typeahead.js


    【解决方案1】:

    q 是要搜索的值。这被传递到正则表达式匹配器中,并且搜索不区分大小写(“i”参数)

    cb 是回调函数,它返回从搜索中找到的匹配项。

    findMatches 基本上是一个匿名函数,用作substringMatcher 函数的实现。

    【讨论】:

    • 好吧,有道理,作者在这种情况下使用匿名函数有什么原因吗?
    • 看起来这有点像柯里化的一种形式,其中 strs 是一个包含在闭包中的字符串列表。基本上是通过 q 过滤 strs 的便捷方式
    • 好的,非常感谢您对此的帮助,让事情变得更加清晰!我讨厌不理解每一行在做什么
    • 存在一个问题,如果在 typeahead 对象初始化后传入的对象 (strs) 发生更改,则这些更改对 substringMatcher 不可见,因为它是在初始化期间复制的。有谁知道如何重新初始化 typeahead 对象?我通过在 findMatches 函数中使用全局对象的名称来解决这个问题 - 但如果您有多个 typeahead 输入字段,则需要为每个字段自定义 substringMatcher。
    猜你喜欢
    • 2013-12-23
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 2021-08-13
    • 1970-01-01
    • 2015-02-17
    相关资源
    最近更新 更多