6

うまくいけば、これは以下の重複ではありません:なぜ Bloodhound.get() は undefined を返すのですか?

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/

なぜこれが起こっているのですか?

4

2 に答える 2

9

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" />

上記の修正をいじる:

Jsフィドル

于 2014-02-08T19:52:51.170 に答える
1

@Chad が言ったように、結果の配列にはオブジェクトが含まれている必要があります。

提案を表示するために使用されるデフォルト値がvalue

だからあなたは次のようなことができます

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;
        }
    }
});
于 2015-01-23T14:44:44.207 に答える