需要将参数从部分渲染传递到.html.erb文件中的javascript函数吗?

时间:2013-02-28 15:34:43

标签: ruby-on-rails ruby ruby-on-rails-3 erb

我只会发布文件的相关片段

index.html.erb

  <%= render "trace/outbound_message", error => @msg_error,:selector => "#ui-accordion-accordion-panel-3", :tab => "ui-id-1" %>

_outbound_message.html.erb

<% unless error.blank? %>
<%= error.html_safe %>
<script>
    $(function() {
        show_error(<% selector %>,<% tab %>);
    });
</script>
<%end%>

但是这个函数无法成功调用,因为我认为js不会嵌入ruby代码。什么是我最快的解决方法?我是否必须调用js.erb文件,如何将参数传递给&amp;在它?

UPDATE 我将脚本更改为

 <script>
  alert("check-up");
    $(function() {
        show_error(<%= selector %>,<%= tab %>);
    });
   </script>

即使没有显示警报?有什么想法吗?

4 个答案:

答案 0 :(得分:0)

在块中使用ruby代码,如:

在Ruby代码中:

v = "show_error(<%= selector %>,<%= tab %>);"

在javascript中:

<script>
    $(function() {

     $(#{v});

    });
</script>

答案 1 :(得分:0)

我认为问题是你的报价!你应该有这样的东西

show_error(foo,bar);

你需要像

这样的东西
show_error('foo','bar');

不要忘记逃避你的JS:

show_error('<%= escape_javascript(@selector) %>', '<%= escape_javascript(@tab) %>');

答案 2 :(得分:0)

这个怎么样?

<script>
alert("check-up");
$(function() {
  show_error(<%= selector.to_json %>,<%= tab.to_json %>);
});
</script>

to_json函数会将您的变量包装在引号之间,而这些引号是缺失的。

答案 3 :(得分:0)

我在玩,我想出来了。

  <%=  javascript_tag( "$(function() {show_error('#{selector}','#{tab}');});")%>

javascript_tag起了至关重要的作用。你不能把它括起来......

Btw @Saurabh - 你非常接近答案,不知道为什么有人会对你投票。