2013-02-18 44 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