我希望能够有这样的 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/