我怎样才能从UJS中获得部分内容?

时间:2010-11-22 17:28:19

标签: jquery ruby-on-rails-3 ujs

我可以通过将函数绑定到超链接来渲染部分吗?

我有一个超链接:

查看所有图像

我在application.js中有这个:

$("#allimages").click(function() {
    $("#results").html("<%= escape_javascript(render 'images') %>");
});

我猜测ruby erb的东西永远不会那样执行。并且“渲染”在Javascript的上下文中没有任何意义。但我不想只是为了显示另一个页面而完全调用服务器。有没有办法只显示部分使用Javascript?除了显示页面和调用可见的开/关?

1 个答案:

答案 0 :(得分:3)

我认为你正在混合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

(请务必在image_results中添加routes.rb的路线。)

然后在image_results.js.erb档案中:

$("#results").html("<%= escape_javascript(render 'images') %>");

这里的关键点是,由于您现在处于由erb处理的文件中,因此您可以使用ruby。

在没有另一个调用的情况下执行此操作的唯一方法是以某种方式单独渲染部分并将其缓存为javascript或者像您所说的那样,在页面本身中然后将其打开/关闭。