【问题标题】:sinatra javascript callsinatra javascript调用
【发布时间】:2013-02-18 21:38:52
【问题描述】:

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

【问题讨论】:

  • 您可以为资源添加删除路由并使用状态码进行回答。您可以使用来自客户端的 ajax 调用来调用此路由。

标签: javascript ruby-on-rails ruby ruby-on-rails-3 sinatra


【解决方案1】:

在 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...
  });
});

因此,它实际上是用data-remote="true" 属性标记您的HTML 链接,然后通过js 处理它。然后通过DOM 评估您可以使用的js.erb 模板。 (我个人认为这是个坏主意)。

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

<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
});

然后,在sinatraSinatra::JSON 中回复JSON

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

然后对 ajax 调用的成功处理程序中的数据做你喜欢的事情。或者,您也可以使用 erb 编写的脚本进行响应(rails 对 .js.erb 所做的):

get '/yoururl' do
  erb :"answer.js"
end

【讨论】:

  • 还没试过,但看起来差不多。感谢您深入研究 rails.js 并找到答案……我不知道该去哪里找。你能告诉我这条特定的线是做什么的吗? on('click.remote', '.remote' => click.remote?我知道 .remote 的目标是远程类
  • $(document).on('click.remote', '.remote', function() {}) 安装一个观察者来寻找click 事件,这些事件源自具有类remote 冒泡到document 的元素。事件类型字符串 (click.remote) 中的 remote 是一个命名空间,可帮助您使用 off('click.remote') 仅解除该处理程序的绑定。如果没有命名空间,就只能解绑所有绑定到文档的点击事件,不够灵活。
猜你喜欢
  • 1970-01-01
  • 2012-12-10
  • 2017-06-06
  • 2015-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-22
相关资源
最近更新 更多