在定义Bloodhound对象的分类器功能时,如何引用要查询的字符串?我的所有数据都是本地的

时间:2014-11-11 02:06:01

标签: typeahead.js bloodhound

以下是代码段:

        var bloodhound_obj = new Bloodhound({
           datumTokenizer: function(data) {
              var name = Bloodhound.tokenizers.whitespace(data.name);
              var id = Bloodhound.tokenizers.whitespace(data.id);
              return id.concat(name);
           },
           queryTokenizer: Bloodhound.tokenizers.whitespace,
           sorter: function(a, b) {
              if (a.id < b.id) {
                 return -1;
              }
              else if (a.id > b.id) {
                 return 1;
              }
              else return 0;
           },
           local: _data,
           limit: 10
        });
        bloodhound_obj.initialize();

        $("#autocomplete").typeahead({
           hint: false,
           highlight : true
        }, {
           displayKey: function(d) {
              return d.name + " (" + d.id + ")";
           },
           source: bloodhound_obj.ttAdapter(),
        });

目前,建议按“id”排序,我想更改它,以便排序取决于我的查询。我尝试过包含一个$(“#autocomplete”)。typeahead(“val”)(在分类器函数中),但这很慢,对于手头的问题来说似乎有些过分。

1 个答案:

答案 0 :(得分:0)

我克服性能问题的方法是。

  1. 为typeahead添加'keyup'处理程序。
  2. 在此处理程序中获取当前搜索条件,而不是每次调用分拣机。
  3. 类似的东西:

    var key = "";
    
    $("#autocomplete").on('keyup', function(e) {
      key = $("#autocomplete").typeahead("val");
    });
    

    现在在分拣机功能中使用键。密钥只会在更改时更新,而不是每次调用时都会更新。