2

这是一个代码片段:

        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") (在排序器函数中),但这很慢,而且对于手头的问题来说似乎有点矫枉过正。

4

1 回答 1

0

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

  1. 为预先输入添加一个“keyup”处理程序。
  2. 在这个处理程序中,获取当前的搜索条件,而不是在每次调用排序器时。

就像是:

var key = "";

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

现在在您的排序功能中使用 key。key 只会在更改时更新,而不是在每次调用排序时更新。

于 2015-03-30T14:30:00.580 回答