2011-01-31 9 views
2
%a{:href => "/new_game?human_is_first=true", :remote => "true"} 
      %span Yes 

上記は私のリンクです。これに対処する方法が不思議です。私はいくつかのjavascriptを実行できるようにする必要があります。以下は、レールを使用しているときの.js.erbファイルです。Ruby w/Sinatra:jQuery AJAXリクエストの例がありますか?

$('.welcome_container').fadeOut(500, function(){ 
    $('.shell').html("<%= escape_javascript(render(:partial => "board/board")) %>"); 
    $('.board_container').fadeIn(500); 
}); 

だから、私の質問は、1回/ new_gameがapp.rbに呼ばれている、私は(ページを離れることなく、かつ部分的にレンダリングされてい)現在のページにいくつかのJavaScriptを送信できるようにしたい

答えて

8

本物のSinatraアプリでHTML部分を送受信するための包括的な設定については、my answer to your other recent questionを参照してください。

Sinatraは優れた軽量フレームワークであるため、独自のワークフローを作成し、パーシャルを実装し、そのような呼び出しを処理するためのコードを作成するのは無料です(強制的に)。私の明示的なroute-per-partialではなく、渡されたURLまたはparamに基づいて正しいデータを検索する単一のregexベースのルートを定義することもできます。

一般に、Sinatraがパスに応答するようにするには、ルートを追加する必要があります。だから、:

get "/new_game" do 
    # This block should return a string, either directly, 
    # by calling haml(:foo), erb(:foo), or such to render a template, 
    # or perhaps by calling ...to_json on some object. 
end 

あなたはレイアウトなし部分を返すようにしたいとビューを使用している場合は、ヘルパーのオプションとしてlayout:falseを渡すようにしてください。

get "/new_game" do 
    # Will render views/new_game.erb to a string 
    erb :new_game, :layout => false 
end 

あなたはJSONレスポンスを返すようにしたい場合は、適切なヘッダデータを設定する必要があります:たとえば

get "/new_game" do 
    content_type :json 
    { :foo => "bar" }.to_json 
end 

あなたが本当にあなたのハンドラから生のJavaScriptコードを返した後、これを実行したい場合...さて、ここであなたはJSを返す方法は次のとおりです。

get "/new_game" do 
    content_type 'text/javascript' 
    # Turns views/new_game.erb into a string 
    erb :new_game, :layout => false 
end 

それはあなた次第ですがJSと*身震い* eval()それを受信します。

関連する問題