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

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

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

渲染:更新do | page | page.replace_html“div_id”,:partial =>“new_content”,…结束

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

我错过了什么? 这几天我们如何替换

多谢你们。 官方的答案似乎是,是的,团队觉得简单是好的敌人,使其变得更加复杂。

第一个关键是为方法调用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的最新版本中已经破解并且尚未修复。 此外,如果您使用它,各种博客将来到您的家,并桦树切换您。

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

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

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

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

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

希望这可以帮助!

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

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

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

 <%= 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 

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

试试这个:

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