Play 2.0 автозаполнение обратной маршрутизации не работает - PullRequest
4 голосов
/ 17 марта 2012

У меня возникают трудности при настройке окна поиска автозаполнения для работы с 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="&lt;function1&gt;">

В итоге мне приходится указывать фиктивный аргумент, чтобы заставить работать обратный маршрут:

<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Должен сказать, я либо очень, очень глуп, что не могу этого понять, либо крупное отсутствие документации по этой функции ...

Ответы [ 2 ]

1 голос
/ 13 июня 2012

Вам не нужно добавлять маршруты javascript.Просто добавьте параметр по умолчанию к вашей записи маршрута, как

GET /autocompleteSearch controllers.Application.autocompleteSearch(term: String ?= "")

Это будет работать

0 голосов
/ 16 апреля 2012

Этот вопрос необходимо перефразировать (слово автозаполнение в названии вводит в заблуждение) и пометить меткой (вы, вероятно, ищете playframework-2.0 вместо playback).

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

...