【发布时间】:2013-05-13 07:57:41
【问题描述】:
Twitters Typeahead 匹配短语中任何位置的任何单词,因此搜索“car”的结果可能来自具有匹配“car”的第二个单词的短语。例如,在带有名片的列表中搜索汽车时。名片出现,更糟糕的是它出现在汽车之前。即:
Search Term: Car
Suggestions:
Business Card
Car
Car Pool
Carbon
我希望它更像是 google 和 twitter(他们从不建议与从一开始就输入的内容不完全匹配的内容),其中输入的单词是最相关的,所以在输入 car 时 Car 会比输入更相关名片。
我希望它实际上只是停止匹配第二个单词,直到有人键入空格并开始第二个单词。所以在上面的例子中,名片不会出现在列表中,除非我输入:
Business C
如何阻止这种匹配和建议从键入搜索开始时不完全匹配的单词的行为。
另一种说法是如何阻止预输入在空间上进行标记或拆分。预输入总是从单词的开头 (^) 开始匹配,因此如果空格未被识别为单词边界,它会更符合 google 和 twitter 用户的预期。
感谢您的帮助, 泰勒
更新 1。
我更新了我的数据集以返回一个具有值和标记的 Datum,以便 typeahead _transformDatum 方法不会通过分割空格来标记标记。这很好用,现在可以按需要工作了:
价值观:苹果、大猿
搜索词:Ap 建议: 苹果
这就是我想要的。但是现在有一个新问题。
问题:使用带有空格的搜索词时,不会返回任何建议。
所以现在当我输入“great”时,只要我输入一个空格,建议就会停止。:
搜索词:Great(带空格) 建议: (无)
我认为令牌不能有空格。即使文档没有在问题中明确说明这一点:
基准的规范形式是具有值属性和 令牌属性。 value 是代表底层证券的字符串 数据和标记的值是帮助的字符串集合 typeahead.js 将数据与给定查询匹配。
【问题讨论】:
-
我已经解决了编辑方法
getSuggestion(github.com/twitter/typeahead.js/blob/master/src/dataset.js#L251) 的空间问题。我删除了对tokenizeQuery的调用,只是将toLowerCase()应用于查询。
标签: twitter-bootstrap bootstrap-typeahead