【问题标题】:Play 2.0 autocomplete reverse routing not working播放 2.0 自动完成反向路由不起作用
【发布时间】: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="&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()">

?

似乎都不起作用!

我必须说,我要么非常非常愚蠢,无法弄清楚这一点,要么主要缺乏有关此功能的文档...

【问题讨论】:

    标签: jquery html scala autocomplete playframework-2.0


    【解决方案1】:

    这个问题需要重新措辞(标题中的 autocomplete 一词具有误导性)并重新标记(您可能正在寻找 playframework-2.0 而不是 playback)。

    关于反向路由,似乎没有足够的演练教程,但是 Play 提供了一个 sample project!应该让你前进的团队。

    【讨论】:

      【解决方案2】:

      您不需要添加 javascript 路由。只需向您的路由条目添加一个默认参数,例如

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

      会有用的

      【讨论】:

        猜你喜欢
        • 2018-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多