【发布时间】:2012-04-02 17:33:41
【问题描述】:
我在让自动完成搜索框与 Play 2.0 一起使用时遇到了困难。我正在尝试做与this article 中描述的相同的事情,但仅限于 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()">
?
似乎都不起作用!
我必须说,我要么非常非常愚蠢,无法弄清楚这一点,要么主要缺乏有关此功能的文档...
【问题讨论】:
标签: jquery html scala autocomplete playframework-2.0