1

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

4

1 回答 1

5

在 Rails 中,:remote => true使用link_tohelper 进行设置会产生以下输出:

<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. (我个人认为这是一个坏主意)。

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

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

然后通过 jQuery 绑定具有远程类的链接: 观察整个文档以查看源自具有远程类的元素的点击事件,就像 rails 那样:

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

JSON然后,用insinatra和回复Sinatra::JSON

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

并对 ajax 调用的成功处理程序中的数据做你喜欢的事情。或者,您也可以使用用 erb 编写的脚本来响应(rails 就是这样做的.js.erb):

get '/yoururl' do
  erb :"answer.js"
end
于 2013-02-18T13:38:52.527 回答