2012-03-17 3 views
4

У меня возникли трудности с поиском окна автозаполнения для работы с Play 2.0. Я пытаюсь сделать то же самое, что описано в this article, только с 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()"> 

?

Ничего не работает!

Я должен сказать, что я либо очень и очень тупой, что я не могу понять это, или есть основных отсутствие документации об этой функции ...

ответ

0

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

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

1

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

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

Он будет работать

Смежные вопросы