2014-02-08 6 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" />

Fiddle с выше исправления:

JsFiddle

+0

Он отлично работает, когда вы вводите 'Ā', но если вы наберете 'Ar' он исчезает –

+1

@JPHellemons Упс. Я починил это. см. обновленную ссылку –

+0

, похоже, что моя ссылка на typeahead указывает на последнюю версию и произошли нарушения. Собираемся оставить обновленную версию связанной, потому что в идеальном мире вы будете использовать обновленную версию. –

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; 
     } 
    } 
}); 
Смежные вопросы