2014-10-28 2 views
0

Я пытаюсь реализовать автозаполнение в своих формах для моего приложения grails. В настоящее время с кодом ниже, когда вы вводите любые символы/слова в поле parameterName, он возвращает значение EVERY внутри столбца parameter_name.Autocomplete Grails с использованием JQuery

Как вы можете себе представить, я просто хочу, чтобы он предлагал значения, основанные на том, что я уже ввел. Поэтому, если я набираю «карточку», он должен предлагать значения, начинающиеся со словарной карты. Какие изменения я должен внести в код ниже, чтобы достичь этого?

Функция у меня в 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, контроллеру или запросу, так как он может его использовать? –

+0

Я новичок в JQuery/Ajax, и это мой первый опыт. Что вы предлагаете мне делать? – Jamie

+0

Я предлагаю вам следовать советам ниже –

ответ

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 возвращенного объекты в структуру JSON, которую ожидает автозаполнение jQuery (например, создайте структуру данных Groovy, которая имитирует ожидаемый формат, а затем возвращает as JSON.

+0

Большое спасибо, теперь это работает :) – Jamie