2013-02-18 39 views
1

在rails中,可以設置:remote => true來遠程調用Web應用程序。然後可以使用.js.erb來響應以更改元素。我如何在Sinatra中創建這個?我想在資源上做一個遠程刪除,如果成功,更新Dom,否則拋出錯誤。sinatra javascript call

+0

你可以添加刪除路徑的資源,並用狀態代碼回答。您可以使用客戶端的ajax調用來調用此路由。 – three 2013-02-18 10:13:04

回答

4

在Rails,使用link_to幫手結果如下輸出設置:remote => true

<a href="#yoururl" data-remote="true">Linktext</a> 

此鏈接在rails.js通過類似觀察:

$(document).on('click.remote', '[data-remote]', function() { 
    $.ajax({ 
    url: $(this).attr('href'), 
    type: $(this).data('method') || 'GET', 
    // and so on... 
    }); 
}); 

它所因此實際上做的是標誌您的HTML鏈接與data-remote="true"屬性,然後通過js處理它。您可以回覆的js.erb模板然後通過DOM撤銷。 (我個人認爲這是一個壞主意)。

在西納特拉,你可以做幾乎相同:先用你的鏈接,例如remote類(提供更快的查找對JS不是一個導軌通過[data-remote]用途:

<a href="#yoururl" class="remote">Your Link Text</a> 

然後結合其通過jQuery遠程類的鏈接:觀察從始發元素與遠程類鐵軌一路點擊事件整個文檔做的:

$(document).on('click.remote', '.remote', function() { 
    // a similar ajax call to the one rails uses 
}); 

然後,與JSON迴應和Sinatra::JSON

get '/yoururl' do 
    json :foo => 'bar' 
end 

做什麼,你在Ajax調用成功處理程序中的數據一樣。或者,你也可以寫在ERB的腳本(這是什麼軌與.js.erb一樣)迴應:

get '/yoururl' do 
    erb :"answer.js" 
end 
+0

還沒有嘗試過,但看起來正確。感謝您挖掘rails.js並找到答案。我不知道該在哪裏尋找。你能告訴我這條線是什麼嗎? on('click.remote','.remote'=> click.remote?我知道.remote的目標是遠程類 – Edward 2013-02-18 18:06:16

+0

'$(document).on('click.remote','.remote',function(){ })'安裝一個觀察者來尋找''click''事件,這些事件源於類'remote'冒泡到'document'的元素。事件類型字符串中的'remote'('click.remote')是一個幫助你能夠使用'off('click.remote')'解除綁定該處理程序。沒有名稱空間,只能解除綁定到文檔的所有單擊事件,這不是很靈活。 – 2013-02-19 06:48:05