sinatra javascript调用

Edw*_*ard 1 javascript ruby ruby-on-rails sinatra ruby-on-rails-3

在rails中,可以设置:remote => true对Web应用程序进行远程调用。然后,人们可以.js.erb对变更元素做出回应。我将如何在Sinatra中创建它?我想对资源进行远程删除,如果成功,请更新Dom,否则抛出错误。

Bea*_*rtz 5

在Rails中,:remote => true使用link_to帮助程序进行设置将导致以下输出:

<a href="#yoururl" data-remote="true">Linktext</a>
Run Code Online (Sandbox Code Playgroud)

rails.js通过以下方式可以观察到此链接:

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

因此,它实际上所做的是HTMLdata-remote="true"属性标记您的链接,然后通过进行处理js。然后,js.erb您可以通过响应的模板将被撤消DOM。(我个人认为这是个坏主意)。

在Sinatra中,您可以执行几乎相同的操作:例如,用一个remote类标记您的链接(该类通过[data-remote]以下方法为js提供了比rails更快的js查找:

<a href="#yoururl" class="remote">Your Link Text</a>
Run Code Online (Sandbox Code Playgroud)

然后通过jQuery绑定具有远程类的链接:观察整个文档中的点击事件,这些事件是由Rails的远程类产生的:

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

然后,以应对JSONsinatraSinatra::JSON

get '/yoururl' do
  json :foo => 'bar'
end
Run Code Online (Sandbox Code Playgroud)

然后对ajax调用的成功处理程序中的数据执行所需的操作。或者,您也可以使用erb编写的脚本来响应(这是rails所做的事情.js.erb):

get '/yoururl' do
  erb :"answer.js"
end
Run Code Online (Sandbox Code Playgroud)