2012-04-22 37 views
3

我對Sinatra很新穎,並且正在製作一個簡單的待辦事項應用程序,它利用了基本的CRUD功能。呼叫Sinatra用jQuery刪除路線

在後臺我有工作路線,並測試了一切。我想加入一些前端功能,並決定使用jQuery來幫助解決這個問題。我在jQuery中有一段代碼,當點擊該項目時,它會向其中一個todo項目添加一個css類。我想包含一個按鈕,指出「刪除已完成的任務」將收集「已完成」類的任務,並觸發將從數據庫中刪除任務的Sinatra路由。目前西納特拉路線是:

delete "/hub/note/:id" do 
    n = Note.get params[:id] 
    n.destroy 
    redirect '/hub' 
end 

如何獲得jQuery和西納特拉溝通刪除與類的「已完成」的項目。任何幫助都會非常有用。

回答

2

利用method_override把戲/黑客,你可以得到你想要的東西做這個:

jQuery.post("/hub/note/" + id, {_method: "delete"}, callback); 

任何利用Rack,包括西納特拉和Ruby on Rails,應該有這樣的行爲。

+0

謝謝!我可以只抓取類「完成」的元素,併發送上述方法嗎? – Julian25 2012-04-22 19:06:01

+0

當然,這是可行的。個人而言,我可能會這樣做的方法是在每個包含整個音符的tr(或li?whatever)中添加一個data-id =「1」或類似的屬性,然後執行此操作: $(「。completed 「).click(function(){ var id = $(this).closest(」tr「)。data(」id「); $ .post(」/ hub/note /「+ id,{_method: 「delete」},function(){ // whatever }); }); – Max 2012-04-22 19:48:29

0

在你的jQuery代碼中。

$.post('/user/' + user.id, {_method: 'delete'}, function(result_data) { 
    console.log('DELETE result', result_data); 
}).error(function(){ 
    console.log("Error trying to DELETE"); 
}); 

在你西納特拉代碼

delete "/user/:id" do 
    if request.xhr? 
    content_type :json 
    id = params[:id].to_i 
    user = User.find_by_id(id) 
    if !user 
     status 404 
     return {:success => false, :message => "Invalid ID supplied."}.to_json 
    end 
    user.destroy 
    return {:success => true, :id => id, :message => "The User with ID #{id} was deleted."}.to_json 
    end 
    status 403 
    return "<html><head><title>Error 403</title></head><body><h2>Expected an AJAX call.</h2></body></html>" 
end 

如果您西納特拉的應用並非modular應用程序,然後還包括與其他setset :method_override, true線。