在 Rails 中,可以设置:remote => true
为对 Web 应用程序进行远程调用。然后可以用 a.js.erb
来响应更改元素。我将如何在 Sinatra 中创建它?我想对资源进行远程删除,如果成功,更新 Dom,否则抛出错误。
问问题
1116 次
1 回答
5
在 Rails 中,:remote => true
使用link_to
helper 进行设置会产生以下输出:
<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 回答