0

我正在使用 typeahead 搜索 3 个数据集。当我不包含 minLength 时,数据集将按照它们在我的代码中列出的顺序呈现;当我为某些数据集而不是全部包含 minLength 时,顺序会发生变化(请参见下面的代码)。我遇到的问题是我希望用户列表始终呈现在下拉列表中的第一位,主题列表始终出现在第二位,而 sec-list 始终出现在第三位。

$('#autocomplete').typeahead([
    {
      name: 'users-list',                                                        
      prefetch: {url: "/prefetch_users/", ttl:1},
      template: [                                                                 
        '<p class=""><a href={{url}}>{{name}}</a></p>',                              
        '<img class="userimg_small" src="{{img}}">'                         
      ].join(''),                                                                 
      engine: Hogan, 
      limit: 4,                                                          
      minLength: 2
    },
    {
      name: 'topic-list',                                                        
      prefetch: {url: "/prefetch_topics/", ttl:1},
      template: '<p class=""><a href={{url}}>{{value}}</a></p>',
      engine: Hogan,
      limit: 3,
      minLength: 3                                            
    },
    {
      name: 'sec-list',                                                        
      prefetch: {url: "/prefetch_secs/", ttl:1},
      remote: {url: "/remote_secs/?q=%QUERY", ttl:1, rateLimitWait: 150},
      template: '<p class=""><a href={{url}}>{{ticker}} - {{name}}</a></p>',
      engine: Hogan                                   
    }
]);
4

1 回答 1

0

好的,所以dropdown_view.js在 Typeahead 中查找代码,看来您所描述的内容是正确的,并且如果不更改代码就无法绕过它(至少现在没有想到)。

发生的情况是,每当数据集与查询匹配时,代码将查看是否有来自数据集的建议。如果是这样,它将简单地更新该数据集的建议。否则,它将在下拉框中创建一个新的“数据集”部分,并将该数据集附加到最底部的下拉列表中。

因此,您看到它们的顺序在第一次之后不会改变(即:3 总是在 1 之前,如果曾经是这种情况),并且该顺序取决于哪个数据集首先与您的查询匹配。

对你来说,这会因为不同minLength的 '.

我想您可以分叉并更改代码-这是一个很小的更改。

否则,我想您还可以编写一个非常丑陋的 hack 来使用内部函数,并为每个数据集呈现一个包含一个虚拟建议的一次性列表。

于 2013-09-23T14:43:34.577 回答