2013-02-28 62 views
0

我会后只有文件的有关片段需要将部分渲染参数传递给.html.erb文件中的javascript函数?

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文件,以及如何将参数传递给&?

UPDATE 我改变了脚本

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

即使不被显示警报?有任何想法吗?

回答

0

使用Ruby代码块中,如:

在Ruby代码:

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

在javascript中:

<script> 
    $(function() { 

    $(#{v}); 

    }); 
</script> 
+0

我没有....我正在尝试你的代码。 – 2013-02-28 15:53:03

+0

不工作,$(#{v})如何工作?在javascript文件中,你将如何解析#{v} ...不是红宝石的家伙。 – 2013-02-28 15:55:39

+0

我刚刚发布了解决方案...你非常接近。 – 2013-02-28 17:50:29

0

我认为这个问题是您报价!你应该有这样的事情

show_error(foo,bar); 

,你需要像

show_error('foo','bar'); 

,不要忘记来逃避JS:

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

这个怎么样?

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

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

0

我正在玩耍,我想通了。

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

javascript_tag起到了至关重要的作用。你不能把它放在...

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

相关问题