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

以上是我的鏈接。只是想知道如何處理這個問題。我需要能夠執行一些JavaScript。當我使用rails時,下面是一個.js.erb文件。紅寶石瓦特/ Sinatra:我可以有一個jQuery AJAX請求的例子嗎?

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

所以,我的問題是,一旦/ new_game被稱爲app.rb,我希望能夠把一些JavaScript來當前頁(無需離開頁面,並有部分渲染)

回答

8

請參閱my answer to your other recent question瞭解在生產Sinatra應用程序中發送和接收HTML部分的全面設置。

由於Sinatra是一個不錯的輕量級框架,您可以自由地使用自己的工作流程和代碼來實現partials和處理這種調用。您可以選擇定義一個基於正則表達式的路由,根據傳遞的URL或參數查找正確的數據,而不是根據每條明確的每條路由。

一般來說,如果您希望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()它。