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')