3

Bloodhound 提案エンジンで Typeahead.js を使用しており、ユーザーが検索ボックスをクリックするとすぐにリストが表示されるようにしたいと考えています。

このstackoverflowの質問(Twitter TypeAheadはすべての結果をプログラムで表示)を見つけました。これは私と同じで、答えはjsfiddleが問題を解決することを示しています:http://jsfiddle.net/5xxYq/

偉大な。

ただし、先行入力のソースとしてブラッドハウンドを使用しない場合にのみ機能しているようです。

たとえば、私は彼らの作業例をフォークし、typeahead ソースを Bloodhound を使用するように切り替えました: http://jsfiddle.net/5xxYq/31/。提案エンジンは正常に動作しています (入力joするとリストが表示されます) が、クリック時に提案を表示するための小さなハックが機能していないようです。

ブラッドハウンドでクリックすると提案リストが表示されるようにする方法について何か考えはありますか?

ありがとう!

4

2 に答える 2

3

このソリューションをブラッドハウンドと組み合わせて使用​​している場合は、bloodhound.js または bundle.js も変更する必要があります。

typeahead.bundle.js または Bloodhound.js で、このコードを見つけて追加します (450 行目)

return matches ? _.map(unique(matches), function(id) {
                return that.datums[id];
            }) : [];

トークン入力が空の場合にすべての提案を返すには、このチェックを追加します。

if (tokens == '') return that.datums;

次のようになります。

if (tokens == '') return that.datums;
return matches ? _.map(unique(matches), function(id) {
                    return that.datums[id];
                }) : [];

私はあなたのフィドルでこれをテストしましたが、動作します。

于 2014-11-26T09:22:08.113 に答える
2

これを行うためのより良い方法があるかもしれないと思います。Bloodhound/boundle js を変更せずに、変更される可能性のある内部の Bloodhound 実装に依存します。

var searchEngine = new Bloodhound({...});
function searchWithDefaults(q, sync) {
  if (q === '') {
    sync(searchEngine.index.all());
  } else {
    searchEngine.search(q, sync);
  }
}
$("#typeahead").typeahead({
  minLength : 0,
}, {
  name : 'typeahead',
  source : searchWithDefaults
});

このコードは、呼び出された Bloodbound 内部検索エンジンの実装と、Bloodhound によって保存されたデータの完全なリストを返すSearchIndexその関数を利用しています。all()

以下に触発された回答:

于 2015-12-22T13:05:42.353 に答える