我无法相信我这个简单的任务已经花了四个小时,但我有。
在Rails 2.3中,我可以用这个简单的代码替换页面的一个部分:
渲染:更新do | page | page.replace_html“div_id”,:partial => “NEW_CONTENT”,... 端
在Rails 3中,Ryan Bates让我编写了全新的javascript函数,从Prototype(rails default)切换到jQuery,否则就不能享受生活。其他的tutes不再那么简单。
我错过了什么?这些天我们如何替换<div>
?
答案 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')