Вот мой пошаговый опыт, вдохновленный примерами typeahead из Scala / PlayFramework. приложение, над которым мы работаем.
В скрипте LearnerNameTypeAhead.coffee
(конвертируемый, конечно, в JS) у меня есть:
$ ->
learners = new Bloodhound(
datumTokenizer: Bloodhound.tokenizers.obj.whitespace("value")
queryTokenizer: Bloodhound.tokenizers.whitespace
remote: "/learner/namelike?nameLikeStr=%QUERY"
)
learners.initialize()
$("#firstName").typeahead
minLength: 3
hint: true
highlight:true
,
name: "learners"
displayKey: "value"
source: learners.ttAdapter()
Я включил пакет typeahead и свой скрипт на страницу, и вокруг моего поля ввода есть div
:
<script [email protected]("javascripts/typeahead.bundle.js")></script>
<script [email protected]("javascripts/LearnerNameTypeAhead.js") type="text/javascript" ></script>
<div>
<input name="firstName" id="firstName" class="typeahead" placeholder="First Name" value="@firstName">
</div>
В результате для каждого символа, введенного в поле ввода после первых символов minLength (3), страница выдает запрос GET с URL-адресом вида /learner/namelike?nameLikeStr=
плюс набранные в данный момент символы. Код сервера возвращает массив объектов json, содержащий поля «id» и «value», например, например:
[ {
"id": "109",
"value": "Graham Jones"
},
{
"id": "5833",
"value": "Hezekiah Jones"
} ]
Для игры мне нужно кое-что в файле маршрутов:
GET /learner/namelike controllers.Learners.namesLike(nameLikeStr:String)
И, наконец, я установил некоторые стили для раскрывающегося списка и т. Д. В новом файле typeahead.css, который я включил в <head>
страницы (или доступный .css)
.tt-dropdown-menu {
width: 252px;
margin-top: 12px;
padding: 8px 0;
background-color: #fff;
border: 1px solid #ccc;
border: 1px solid rgba(0, 0, 0, 0.2);
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
border-radius: 8px;
-webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);
-moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);
box-shadow: 0 5px 10px rgba(0,0,0,.2);
}
.typeahead {
background-color: #fff;
}
.typeahead:focus {
border: 2px solid #0097cf;
}
.tt-query {
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.tt-hint {
color: #999
}
.tt-suggestion {
padding: 3px 20px;
font-size: 18px;
line-height: 24px;
}
.tt-suggestion.tt-cursor {
color: #fff;
background-color: #0097cf;
}
.tt-suggestion p {
margin: 0;
}
person
wwkudu
schedule
04.07.2014