2

我有一个使用不显眼的 ajax 的网站。

简而言之,流程是:

  • 远程链接
  • 由控制器管理的请求
  • js.erb 视图将响应发送回浏览器

我希望我的所有 js.erb 视图都执行类似的“维护活动”,例如在需要时插入 flash 消息、更新 url 等。

我怎样才能使这个干燥?理想情况下,我每次都会使用部分代码来执行,但我找不到如何做到这一点。

我的 js.erb 文件:

$("#challenge_actions").html("<%= escape_javascript(render partial: "challenges/best_practice_button")%>");
$("#flash_messages").html("<div id='flash_notice'><%= escape_javascript(flash[:notice])%></div>");

如何提取带有 flash_messages 的行并将其自动包含在我的所有 js.erb 文件中?

4

2 回答 2

3

您可以使用 js 布局,就像 html 布局一样。

布局/custom.js.erb

alert("<%=j flash[:notice] %>");
<%= yield %>

控制器/your_controller.rb

def your_action

  flash[:notice] = "hello world"
  @hello = "hello world"

  respond_to do |format|
    format.js { render layout: "custom" }
  end
end

your_action.js.erb

alert("<%= j @hello %>");
于 2012-10-16T10:29:21.110 回答
0

您也可以在 erb 中使用部分模板,假设您想用 id "container" 替换 div 的内容,然后假设您使用的是 jquery,您可以这样做

$('#container').html('<%= escape_javascript(render(:partial => 'mypartial'))%>')
于 2012-10-16T10:19:57.157 回答