【问题标题】:Transliterate query string for typeahead.jstypeahead.js 的音译查询字符串
【发布时间】:2014-03-06 13:45:34
【问题描述】:

我正在使用 typeaheadjs,我想在将搜索查询发送到服务器之前对其进行音译。

@Edvad Zagorski 为此提供了出色的 php 数组:https://stackoverflow.com/a/6837302/377192

但我需要在 beforeSend() 方法中做同样的事情。因此,如果用户开始输入类似

čikago

它会发送

cikago

到服务器。

我尝试了无数的 twig 技巧:json_encode、raw、url_encode... 没有奏效,因为我并没有真正得到这些编码。

有可能吗?我猜问题是 beforeSend() 方法接收到 urlEncodedQuery,而不是真正的。

【问题讨论】:

    标签: javascript twig typeahead.js


    【解决方案1】:

    我在GitHub提出的基于tokenizer的解决方案:

    var charMap = {'àáâããäå': 'a', 'èéêë': 'e', 'ç': 'c', 'ß': 'ss', /* ... */};
    
    var normalize = function(str) {
      $.each(charMap, function(chars, normalized) {
        var regex = new RegExp('[' + chars + ']', 'gi');
        str = str.replace(regex, normalized);
      });
    
      return normalized;
    }
    
    var queryTokenizer = function(q) {
      var normalized = normalize(q);
      return Bloodhound.tokenizers.whitespace(normalized);
    };
    
    var engine = new Bloodhound({
      // ...
      queryTokenizer: queryTokenizer
    });
    

    【讨论】:

      【解决方案2】:

      我也有同样的问题。获取最新版本的 Typeahead(本文发布时为 0.10.1)。此版本集成了 Bloodhound 的使用,允许在提交前对查询使用 .replace()。

      这里是 Bloodhound 文档: https://github.com/twitter/typeahead.js/blob/master/doc/bloodhound.md#remote

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-19
        • 1970-01-01
        • 1970-01-01
        • 2019-02-23
        • 2013-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多