0

システムのページを検索するDjangoアプリケーションにBootstrap-Ajax-Typeaheadの実装があります。私は、AJAXを介した検索に基づいて検索結果に合ったページを取得し、ユーザーは先行提案をクリックして問題のページに移動できます。クエリがdisplayFieldにないときにBootstrap-Ajax-Typeaheadが結果を表示しない

しかし、クエリ文字列がdisplayField(タイトル)に含まれていない場合は、検索メカニズムを介して返されたことがわかりますが、提案は表示されません。私は試合が中に発見された場合、まだユーザーに結果を表示したい

{ 
    title: "Movies", 
    url: "/movies/", 
    description: "Find a motion picture in your area" 
} 

:私は「映画」を検索する場合たとえば、私のような私の検索を経由してJSONオブジェクトの戻りを

を持っていますdescription属性が一致するヒントがある場合にのみ、Typeaheadが表示されます。

クエリがdisplayFieldにない場合に検索結果を表示するにはどうすればよいですか?

注:私はBv3で前書きブートストラップを使用しています。デフォルトでは

$(document).ready(function ($) { 
    var JSONSearchURL = "/search/"; 
    var searchBox = $('#search-form'); 
    searchBox.typeahead({ 
     onSelect: function (item) { 
      window.location = item.value; 
     }, 
     ajax: { 
      url: JSONSearchURL, 
      timeout: 800, 
      displayField: "title", 
      valueField: "url", 
      method: "get", 
      dataType: "JSON", 
      preDispatch: function (query) { 
       return { 
        q: query 
       } 
      }, 
      preProcess: function (data) { 
       return data; 
      } 
     } 
    }); 
}); 

答えて

2

bootstrap-ajax-typeaheadはマッチを検索するためにdisplayFieldを使用しています。この動作を無効にして別のフィールドを検索する場合は、grepperイベントを上書きする必要があります。このような何か(未テスト)動作するはずです:

grepper: function(data){ 
    var that = this; 
    if(data && data.length){ 
     items = $.grep(data, function(item){ 
      return that.matcher(item['description']); 
     }); 
     return items; 
    } 
    return null; 
} 

ここgrepperのデフォルトの実装を参照してください:https://github.com/biggora/bootstrap-ajax-typeahead/blob/master/src/bootstrap-typeahead.js#L283

+0

感謝を!表示されたすべての結果はバックエンド検索で一致するので、 'matcher'メソッドを使用して同様の修正を行い、常に' true'を返します。 –

関連する問題