У меня возникают трудности при настройке окна поиска автозаполнения для работы с Play 2.0.Я пытаюсь сделать то же самое, что описано в этой статье , только с Play 2.0.
По сути, я определил действие:
def autocompleteSearch(term : String) = Action {
// Do something to get a list of suggestions
val list = ...
// Reply with list
Ok(Json.toJson(list))
}
Я добавилмаршрут в файле маршрутов:
GET /autocompleteSearch controllers.Application.autocompleteSearch(term: String)
Я создал скрипт автозаполнения:
$(function() {
/*
* Autocomplete for populating an input field with a value from the server.
*/
$('input.autocomplete').each( function() {
var $input = $(this);
var serverUrl = $input.data('url');
$(this).autocomplete({ source:serverUrl });
});
});
И где-то на странице вставляю следующее:
<input name="search" class="autocomplete" data-url="@{routes.Application.autocompleteSearch()}">
К сожалению, это не работает!Я получаю следующую ошибку компиляции:
not enough arguments for method autocompleteSearch: (term: String)play.api.mvc.Call. Unspecified value parameter term.
Если я сделаю это, я получу следующую ошибку:
<input name="search" class="autocomplete" data-url="@{routes.Application.autocompleteSearch}">
missing arguments for method autocompleteSearch in class ReverseApplication; follow this method with `_' if you want to treat it as a partially applied function
Если рассматривать ее как частично примененную, то не получу желаемый результат, так какполученный HTML выглядит следующим образом:
<input name="search" class="autocomplete" data-url="<function1>">
В итоге мне приходится указывать фиктивный аргумент, чтобы заставить работать обратный маршрут:
<input name="search" class="autocomplete" data-url="@{routes.Application.autocompleteSearch( "" )}">
Но тогда мое автозаполнение бесполезно, потому что оно всегдавызвать функцию с пустой строкой ...
Кому-нибудь удалось заставить это работать?
Заранее спасибо за помощь!
==
Дополнительный вопрос:
Хорошо.Поэтому я следовал за документом и определил это в Application.scala:
def javascriptRoutes = Action {
import routes.javascript._
Ok(
Routes.javascriptRouter("jsRouter")(
routes.javascript.Application.autocompleteSearch
)
).as("text/javascript")
}
Я добавил этот скрипт на страницу:
<script type="text/javascript" src="@routes.Application.javascriptRoutes"></script>
Теперь, как мне изменить поле ввода для подключенияточки?
Это:
<input name="search" class="autocomplete" data-url="jsRouter.controllers.Application.autocompleteSearch">
или
<input name="search" class="autocomplete" data-url="jsRouter.controllers.Application.autocompleteSearch().ajax()">
?
Ни то, ни другое не работает!
IДолжен сказать, я либо очень, очень глуп, что не могу этого понять, либо крупное отсутствие документации по этой функции ...