我使用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
}
]);
答案 0 :(得分:0)
好的,所以在Typeahead中查看dropdown_view.js
的代码,看起来你所描述的是正确的,并且没有改变代码就没有办法(至少现在没有想到的)。< / p>
当数据集与查询匹配时,代码将会看到数据集中是否有建议。如果是这样,它将只更新该数据集的建议。否则,它将在保管箱中创建一个新的“数据集”部分,将该数据集追加到最下方的下拉列表中。
因此,您看到它们的顺序在第一次之后不会改变(即:3将始终在1之前,如果是这种情况),并且该顺序取决于哪个数据集首先与您的查询匹配。< / p>
对于您而言,由于minLength
的不同而发生变化。
我想你可以分叉并改变代码 - 这是一个很小的改变。
否则,我想你也可以编写一个非常丑陋的黑客来使用内部函数,并为每个数据集渲染一次虚拟建议的一次性列表。