ajaxでオートコンプリートを使用したいと思います。だから私の目標は持っていることです:
ユーザーがテキストフィールドに何かを入力すると、サーバーから提供されたいくつかの提案が表示されます(データベースで提案を見つける必要があります)
ユーザーが「Enter」を押すか、オートコンプリートボックス以外の場所をクリックするか、提案を選択すると、テキストフィールドの文字列がサーバーに送信されます。
私は最初にliftが提供するオートコンプリートウィジェットを使おうとしましたが、3つの問題に直面しました。
- これは拡張選択であることが意図されています。つまり、元々は提案された値のみを送信できます。
- ajaxで使用するためのものではありません。
- と組み合わせるとバグが発生し
WiringUI
ます。
だから、私の質問は次のとおりです。jqueryオートコンプリートを組み合わせて、リフトでサーバーと対話するにはどうすればよいですか。いくつかのコールバックを使用する必要があると思いますが、それらをマスターしていません。
前もって感謝します。
更新これは私が試した最初の実装ですが、コールバックが機能しません:
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 + ");" +
"}"+
"})});"
})
<head><script charset="utf-8"> {script} </script></head> ++
<span id={id}> {SHtml.ajaxText(init, s=>{ /*set cell to value s*/; Noop}) } </span>
}
だから私の考えは:
SHtml.ajaxText
オートコンプリートフィールドにラップされるフィールドを介して選択した結果を取得するには- javascript関数を使用してオートコンプリートの提案を更新するには