2012-03-17 51 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 ?= "")

它將工作