javascript - 使用 Rails Controller 轻松替换 AJAX HTML 元素?

标签 javascript ruby-on-rails ajax

我希望能够有这样的 ERB 部分:

<ul id='things-index'>
  <% @things.each do |t| %>
    <li><%= t.name %></li>
  <% end %>
</ul>

并且能够像这样在 Controller 中更新它:

class ThingsController < ApplicationController
  def create
    @thing = Thing.new(params[:thing])
    @thing.save

    respond_to do |format|
      format.html
      format.js do
        @things = Thing.all
        page.replace('things-index')
      end
    end
  end
end

这意味着 JavaScript 将作为响应发送,而无需我显式编写如下 create.js.erb 的 js.erb 模板:

$('#things-index').replaceWith('<%= escape_javascript(render("things/index")) %>')

可能已经有类似的东西,要么内置在 Rails 中,要么作为 gem 提供,但如果有,我不知道。

我想理想情况下,它会通过 JS 重新呈现“索引”操作并将更新发送到浏览器,因此它可能看起来更像这样:

respond_to do |format|
  format.html
  format.js do
    render 'index'
  end
end

并且知道要替换 #things-index(或者允许我明确指定它)。

更新

糟糕...当 Prototype 成为 Rails 的一部分时,显然有 page.replace_html,但该功能已被 .js.erb 模板方法取代。这对我来说似乎不那么枯燥(大量几乎相同的 js.erb 模板),所以如果有人有解决方案,我将不胜感激。

最佳答案

您可以将任何您想要的内容传递给您的 js.erb,包括要替换的内容以及替换的内容。

$('<%= @id %>').replaceWith('<%= escape_javascript(render(@renderable)) %>')

注意 即使在 2012 年,这也不是真正推荐的做此类事情的方法。这些天(2015 年初)我认为考虑到可用的优秀客户端技术,它更不值得推荐。

关于javascript - 使用 Rails Controller 轻松替换 AJAX HTML 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9217500/

相关文章:

javascript - 通过 javascript 对网页所做的更改未出现在 WebView 中。有没有办法强制 WebView 重绘其内容?

javascript - 如何避免在滚动时写入 DOM?

ruby-on-rails - 我如何在 ipod 上运行开发 Rails 应用程序/网站

javascript - 在 Vanilla JavaScript 中的表的每个 <tr> 行中使用 AJAX `onKeyUp` 提交表单

javascript - 从 onclick 调用时 $.ajax 不工作

javascript - 有没有一种方法可以仅将 Gatsby 用于静态 html 文件而不使用 webpacked javascript 文件?

javascript - 在 Promise 返回函数中找到第一个成功

ruby-on-rails - Rails : model. 保存返回 false 但models.errors 是空哈希

ruby-on-rails - 方法级别的 Rails API 版本控制

javascript - 如何使用 JQuery 追加 ajax 成功响应后聚焦到 div