13

我不敢相信我已经为这个简单的任务寻找了四个小时,但我做到了。

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

渲染:更新做|页面| page.replace_html "div_id", :partial => "new_content",... 结束

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

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

4

6 回答 6

12

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

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

其次,在 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 的最新版本中出现故障,并且尚未修复。此外,如果您使用它,各种博主会到您家并桦树开关您。

于 2010-10-26T18:07:27.040 回答
4

整个RJS的东西使 javascript 内联并使 dom 非常突兀此外,通过避免内联 javascript,您可以通过在浏览器中压缩缓存这些文件来打开其他可能的优化 javascript 的方法。这就是 RJS 超出 rails 3 范围的原因。花一点时间使用 jQuery 或 Prototype 应该会让您熟悉这些小东西,并且从长远来看将有助于项目。

于 2010-10-25T16:28:27.703 回答
1

你那里还有 jQuery 吗?我会在任何一天都推荐它而不是原型...

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

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

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

希望这可以帮助!

于 2010-10-25T15:51:44.703 回答
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

有什么理由不建议使用这种方法吗?

于 2013-04-03T06:29:47.767 回答
0

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

$('#div_id').html($('<%= render :partial => @object %>'))
于 2010-10-25T16:15:13.947 回答
-2

尝试这个:

page.call "$('#div_id').html", render(:partial => 'new_content')
于 2011-01-26T23:46:44.847 回答