私は自分のページにlive-search-functionを実装しています。次の簡略化されたsinatraコントローラーがあります。
get '/search_item/:for' do
//do some search stuff
haml :search_item,:layout => (request.xhr? ? false : :layout),
:locals => { :found_items => queried_items,
:current_user => current_user,
}
end
次に、入力フィールドを含むlayout.hamlファイルがあります
%input(type="text" id="search_query" name="search_query" size="15" value="")
と2つのdiv
#content
= yield
#results(style="display=none")
xhrまたはjsonリクエストを送信するためにjquery/javascript関数が必要です。sinatraコントローラーの入力を使用してsearch_itemビューを生成し、ページ全体を更新せずにレイアウト#resultsdivでレンダリング/ロードする必要があります。 。今では私は次のようなものを持っています:
:javascript
$(function() {
$("#search_query").keyup(function(){
var q = $("#search_query").val();
if(q != ""){
----------- this is the problem part -------------
$.get('/search_item/'+q, function(data) {
$('#results').html(data);})
--------------------------------------------------
$("#content").css("display","none");
$("#results").css("display","inline");
}
else{
$("#content").css("display","inline");
$("#results").css("display","none");
}}); });
ルーティングされたhamlビューをdivにロードするだけの方法はありますか?
var url = "/search_item/"+q;
$('#results').load(url);
私はそれを試しましたが、うまくいきませんでした。
レールは使用していません!だから私は3つの質問があります:
- キーアップのリクエストをsinatraに適切に送信するにはどうすればよいですか?また、そこでどのように使用できますか?
- 次に、更新せずにsearch_item.hamlをlayout.haml#resultsdivにレンダリングするにはどうすればよいですか。
- それを行うためのよりエレガントな方法はありますか?
よろしくお願いします!