Rails 3:简单的AJAXy页面更新?

时间:2010-10-25 15:45:54

标签: ruby-on-rails jquery rjs

我无法相信我这个简单的任务已经花了四个小时,但我有。

在Rails 2.3中,我可以用这个简单的代码替换页面的一个部分:

渲染:更新do | page |   page.replace_html“div_id”,:partial => “NEW_CONTENT”,... 端

在Rails 3中,Ryan Bates让我编写了全新的javascript函数,从Prototype(rails default)切换到jQuery,否则就不能享受生活。其他的tutes不再那么简单。

我错过了什么?这些天我们如何替换<div>

6 个答案:

答案 0 :(得分:12)

谢谢,伙计们。官方的答案似乎是,是的,团队觉得简单就是善的敌人,使其变得更加复杂。

第一个关键是为方法调用ajax更新创建一个.js.erb文件NAMED。因此,如果索引方法处理更新,请将原始javascript放在index.js.erb中。这将在views文件夹中。

其次,在index.js.erb中工作的代码是

m = $('list_users');    
m.innerHTML = "<%= escape_javascript(render :partial => "reload_users") %>";

然后进行调用,添加控制器方法的respond_to块,添加:

format.js

最后,调用视图有:

<%= link_to "Update User List", @reload_users_path, :remote => true %>

顺便说一下,如果你安装了一个插件,那么所有使用page.replace的旧页面都会有效。插件下载页面表明它在Rails 3的最新版本中已经破坏并且尚未修复。此外,如果您使用它,各种博客将来到您的家中并且桦木切换您。

答案 1 :(得分:4)

整个 RJS 的内容使javascript内联并使dom非常突兀。此外,通过避免内联JavaScript,您可以通过浏览器中的压缩缓存这些文件,打开其他可能的优化JavaScript的方法。这就是为什么RJS超出轨道3的原因。一天使用jQuery或Prototype进行一些操作可以让你开始使用这些小东西,并且可以长期帮助项目。

答案 2 :(得分:1)

你还有jQuery吗?我会在任何一天推荐Prototype ......

如果它仍然存在,您可以在Javascript中使用以下内容:

$.get("<%= url_for path/to/partial %>",
      function(response) {
        $("#div_id").html(response);
      });

这通过AJAX获取部分并将其转储到id为div_id的div中。

希望这有帮助!

答案 3 :(得分:0)

我甚至不确定你是否需要进行AJAX调用以加载该部分内容。我相信在js.erb文件中,对render(:partial =&gt; object_or_path)的调用将只返回一个包含所有html的字符串,您可以将其包装在jQuery对象中并追加。例如:

$('#div_id').html($('<%= render :partial => @object %>'))

答案 4 :(得分:0)

据我所知,与上述答案一样,您可以在模板中执行以下操作:

<%= link_to "Update User List", @reload_users_path, :remote => true %>

在控制器中,执行此操作:

respond_to do |format|
  format.js {
    render :text => "alert('reloaded')"
  }
end

这样你就可以让控制器“执行”客户端JS和render:update一样。这相当于在Rails 2中执行以下操作:

render :update do |page|
   page << "alert('reloaded')"
end

有什么理由不采用这种方法吗?

答案 5 :(得分:-2)

试试这个:

page.call "$('#div_id').html", render(:partial => 'new_content')