2014-10-28 94 views
0

我試圖在我的Grails應用程序的表單中實現自動完成。目前使用下面的代碼,當您在parameterName字段中鍵入任何字符/單詞時,它將返回parameter_name列中的EVERY值。使用JQuery的Grails自動完成

正如你可以想象的,我只是希望它建議基於我已經輸入的值。所以如果我輸入'卡'它應該建議以字卡開始的值。爲了實現這一目標,我需要對下面的代碼進行哪些修改?

我在form.gsp功能:

<script> 
$(function() { 

$("#parameterName").autocomplete({ 
    source: '${g.createLink(controller: 'templateInput', action: 'suggestedParameterNames')}' 
    }); 
}); 
</script> 

我有我的控制器templateInput功能:

def suggestedParameterNames() { 
    def suggestions = templatingService.getSuggestedParamNameValues() 

    render suggestions as JSON 
} 

我在我的服務功能:

def getSuggestedParamNameValues(){ 
    def sql = new Sql(dataSource) 
    def row = sql.rows("select distinct parameter_name from template_input") 

    return row 
} 

任何幫助將不勝感激

+0

但是你沒有將輸入的文本傳遞給AJAX調用,控制器或查詢,那麼它怎麼可能使用它? – 2014-10-28 23:11:02

+0

我是新來的JQuery/Ajax,這是我第一次體驗它。你建議我做什麼? – Jamie 2014-10-28 23:28:51

+0

我建議你按照下面的建議 – 2014-10-29 10:56:38

回答

0

jQuery autocomplete提供了一個term參數,其中包含用戶鍵入的文本(假設您使用的版本號是http://api.jqueryui.com/autocomplete/)。所以,你首先需要測試正在發送,然後將它傳遞到您的服務:

def suggestedParameterNames(String term) { 
    log.debug "input text = ${term}" 
    def suggestions = templatingService.getSuggestedParamNameValues(term) 
    render suggestions as JSON 
} 

搜索包含您的子查詢域對象的常用方法是通過使用動態取景器類似命令SQL:

def foundItems = MyDomain.findAllByFooLike(terms + "%", params) 

或通過SQL(猜測所以可能是不正確的語法)

def row = sql.rows("select distinct parameter_name from template_input where parameter_name like " + terms + "%") 

然後你可能需要按摩的返回List將對象轉換爲jQuery自動完成期望的JSON結構(例如,創建一個模仿預期格式的Groovy數據結構,然後返回as JSON

+0

非常感謝你,它現在正在工作:) – Jamie 2014-10-29 16:52:12