Подъем - Автозаполнение с отправкой Ajax

Я хотел бы использовать автозаполнение с помощью ajax. Итак, мой цель состоит в том, чтобы:

  • Когда пользователь вводит что-то в текстовое поле, появляются некоторые предложения, предоставленные сервером (мне нужно найти предложения в базе данных)

  • Когда пользователь нажимает «ввод», щелкает где-то еще, чем в поле автозаполнения или когда он/она выбирает предложение, строка в текстовом поле отправляется на сервер.

Сначала я попытался использовать виджет автозаполнения, предоставленный лифтом, но столкнулся с тремя проблемами:

  • это предназначен для расширенного выбора, то есть изначально вы можете отправлять только рекомендуемые значения.
  • он не предназначен для использования с ajax.
  • в сочетании с WiringUIон вызывает ошибки.

Итак, мой вопрос: как я могу совместить автозаполнение jqueryи взаимодействовать с сервером в лифте.Я думаю, что я должен использовать некоторые обратные вызовы, но я не осваиваю их.

Заранее спасибо.

UPDATEВот первая реализация, которую я попробовал, но обратный вызов не работает:

private def update_source(current: String, limit: Int) = {   
  val results = if (current.length == 0) Nil else /* generate list of results */
  new JsCmd{def toJsCmd = if(results.nonEmpty) results.mkString("[\"", "\", \"", "\"]") else "[]" }
}   

def render = {
  val id = "my-autocomplete"
  val cb = SHtml.ajaxCall(JsRaw("request"), update_source(_, 4))
  val script = Script(new JsCmd{
    def toJsCmd = "$(function() {"+
      "$(\"#"+id+"\").autocomplete({ "+
      "autocomplete: on, "+
      "source: function(request, response) {"+
        "response("+cb._2.toJsCmd + ");"  +
      "}"+
      "})});"
  })

   ++
   {SHtml.ajaxText(init, s=>{ /*set cell to value s*/; Noop}) }   
}

Итак, моя идея заключалась в следующем:

  • получить выбранный результат через поле SHtml.ajaxTextкоторый будет заключен в поле автозаполнения
  • для обновления предложений автозаполнения с использованием функции javascript

8
задан Christopher Chiche 9 April 2012 в 10:22
поделиться