我很難讓自動完成搜索框與Play 2.0一起使用。我正在嘗試按照this article中的說明進行操作,只能使用Play 2.0。播放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()">
?
兩者似乎都沒有工作!
我必須說,我要麼非常非常愚蠢的,我不明白這一點,或者是有主要缺乏此功能的文檔......