2012-03-17 33 views
4

我很难让自动完成搜索框与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="&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

需要被改写这个问题(标题中的自动完成这个词是误导性的)并被重新标记(你可能在寻找playframework-2.0而不是playback)。

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

1

您无需添加javascript路由。只需添加一个默认的参数,以你的路由条目像

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

它将工作