2014-02-08 27 views
5

但願這不是一個重複:Why does bloodhound.get() return undefined?爲什麼typeahead的建議沒有定義?

我升級到typeahead.js版本0.10.0。之前的版本正確地返回了這些建議。現在我得到的回報undefined與下面的代碼:

// instantiate the bloodhound suggestion engine 
var engine = new Bloodhound({ 
    datumTokenizer: function (d) { return [d]; }, 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    local: ["(A)labama", "Alaska", "Arizona", "Arkansas"] 
}); 

// initialize the bloodhound suggestion engine 
engine.initialize(); 

$('#typeahead').typeahead(null, { 
     source: engine.ttAdapter() 
    }); 

這裏是我的小提琴:http://jsfiddle.net/ucUcn/6/

任何想法,爲什麼發生這種情況?

回答

7

local數組必須包含對象,而不是自己的字符串。

// instantiate the bloodhound suggestion engine 
 
var engine = new Bloodhound({ 
 
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('d'), 
 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
 
    local: [{ 
 
    d: "(A)labama" 
 
    }, { 
 
    d: "Alaska" 
 
    }, { 
 
    d: "Arizona" 
 
    }, { 
 
    d: "Arkansas" 
 
    }] 
 
}); 
 

 
// initialize the bloodhound suggestion engine 
 
engine.initialize(); 
 

 
$('#typeahead').typeahead(null, { 
 
    displayKey: 'd', 
 
    source: engine.ttAdapter() 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<script src="http://twitter.github.io/typeahead.js/releases/latest/typeahead.bundle.js"></script> 
 
<input id="typeahead" />

撥弄上述修正:

JsFiddle

+0

它的偉大工程,但如果你鍵入'Ar'它消失了 –

+1

@ JPHPLEONS哎呀。我修好了它。看到更新後的鏈接 –

+0

它看起來像我的typeahead鏈接指向最新版本,併發生了重大變化。由於在理想的世界中,您將使用更新後的版本,因此要離開更新後的版本。 –

1

正如@Chad說,結果數組必須包含對象。

我只是想補充一點,用來顯示建議的默認值是value

所以,當你鍵入'A`你可以做類似

var suggestionEngine = new Bloodhound({ 
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'), 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    remote: { 
     url: "myUrl", 
     filter: function (suggestions) { 
      var mappedResult = $.map(suggestions[1], function(suggestion) { 
       return { value : suggestion } 
      }); 

      return mappedResult; 
     } 
    } 
});