首页 > 解决方案 > 如果内容匹配,则在输入前搜索

问题描述

我有一个 typeahead.js 搜索,它搜索两个不同的类别(应用程序和联系人),每个类别都调用 json 文件的后端。我正在添加按应用程序和联系人 ID 搜索的功能,如果前三个字符分别为“OA-”或“OC-”,我希望阻止另一个触发。

searchTerms.typeahead {
  hint: true
  highlight: true
  minLength: 3
}, {
  name: 'applications'
  displayKey: 'address'
  valueKey: 'id'
  source: searchApplications.ttAdapter()
  templates:
    header: '<h4 class="tt-header">Applications:</h34>',
    suggestion: (data) ->
      if data.external_code
        '<div class="search-result-item">' + data.address + ' – ' + data.external_code + '</div>'
      else
        '<div class="search-result-item">' + data.address + ' <span class="btn btn-sm btn-id">OA-' + data.id + '</span></div>'
  limit: 10
},
name: 'contacts'
displayKey: 'name'
valueKey: 'id'
source: searchContacts.ttAdapter()
templates: header: '<h4 class="tt-header">Contacts:</h4>',
suggestion: (data) ->
  '<div class="">' + data.name + ' <span class="btn btn-sm btn-id">OC-' + data.id + '</span></div>'
limit: 10

如果前 3 个字符是“OA-”或“OC-”,如何阻止第二个运行?

标签: javascriptcoffeescripttypeahead.js

解决方案


我最终想通了...

解决方案需要修改source: searchApplications.ttAdapter()使用的 Bloodhound。

new Bloodhound函数中,我使用 prepare 来运行 beforeSend 操作:

search = new Bloodhound(
    remote:
      url: '/applications.json'
      prepare: (query, settings) ->
        settings.url = settings.url + '?query=' + query + '&search=true'
        settings.beforeSend = (e) ->
          if query.substr(0,3).toLowerCase() == 'oc-'
            e.abort()
        return settings
)

推荐阅读