【问题标题】:How can I render a partial from UJS?如何从 UJS 渲染部分内容?
【发布时间】:2010-11-22 17:28:19
【问题描述】:
我可以通过将函数绑定到超链接来呈现部分吗?
我有一个超链接:
查看所有图片
我在 application.js 中有这个:
$("#allimages").click(function() {
$("#results").html("<%= escape_javascript(render 'images') %>");
});
我猜 ruby erb 的东西永远不会像那样执行。在 Javascript 的上下文中,“渲染”没有任何意义。但我不想为了显示另一个页面而对服务器进行完整调用。有没有办法只使用 Javascript 来显示部分内容?除了显示页面和调用可见的开/关吗?
【问题讨论】:
标签:
jquery
ruby-on-rails-3
ujs
【解决方案1】:
我认为您正在混合 application.js(纯 javascript)并从您的控制器返回 erb 处理的 javascript (.js.erb) 文件。
你需要这样做(未经测试):
将点击处理程序设置为执行 ajax 请求:
$("#allimages").click(function() {
$.get('something/image_results');
});
在你的SomethingController:
class SomethingController < ApplicationController
respond_to :js, :only => [:image_results]
def image_results
@images = do_something
end
end
(请务必在routes.rb 中添加image_results 的路由。)
然后在image_results.js.erb文件中:
$("#results").html("<%= escape_javascript(render 'images') %>");
这里的关键是,由于你现在在一个由 erb 处理的文件中,你可以使用 ruby。
在没有其他调用的情况下执行此操作的唯一方法是以某种方式单独呈现部分并将其缓存为 javascript 或像您所说的那样,在页面本身中,然后打开/关闭它。