非常に大きなデータには先行入力を使用する必要があります。データの生成には4〜5秒かかります。そのため、毎回Ajax呼び出しを行うことはできません。ユーザーの要求に応じてデータをダウンロードしてキャッシュします。私のコードは次のとおりです。
$("#build-package-list-btn").click(function(){
$.get**JSON**("/packages", function(data){
// data is an array
$("#typeahead-packages").typeahead({source:data});
console.log(data == null); // returns false
});
})
エラーは発生しませんが、先行入力テキストボックスに書き込もうとすると、次のエラーが発生します。
Uncaught TypeError: Cannot call method 'toLowerCase' of null bootstrap.js:1644
Typeahead.matcher bootstrap.js:1644
(anonymous function) bootstrap.js:1631
e.extend.grep jquery-1.7.2.min.js:2
Typeahead.lookup bootstrap.js:1630
Typeahead.keyup bootstrap.js:1738
e.extend.proxy.g jquery-1.7.2.min.js:2
f.event.dispatch jquery-1.7.2.min.js:3
f.event.add.h.handle.i jquery-1.7.2.min.js:3
私の先行入力はこんな感じです(JADE)
input#typeahead-packages(type="text",data-provide="typeahead")
また、Chromeコンソールで私は試しました:
$("#typeahead-packages").typeahead({source:["abcdef","abcddd","abcccc"]});
ただし、先行入力ではエラーは発生しませんが、機能しません。何が間違っているのかわかりません。2.0.4ブートストラップを使用しています。
編集:私はそれをgetJSONに変更しましたが、それは役に立ちませんでした。ただし、このようなデータを作成すると、次のように機能します。
data = [new String((data[0])), new String((data[5]))];