我在 .html.erb 文件中包含此代码:
<script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script>
<script>
FB.Event.subscribe('edge.create',
function(response) {
send_fb_like();
}
);
FB.Event.subscribe('edge.remove',
function(response) {
send_fb_unlike();
}
);
function send_fb_like()
{
var business_name = '<%= @consumer.name %>';
alert("You liked"+consumer_name);
}
function send_fb_unlike()
{
var business_name = '<%= @consumer.name %>';
alert("You unliked"+consumer_name);
}
</script>
这是正常的,我可以正确访问 @ consumer.name 。但是,如果我将其更改为:
facebook_consumer.js看起来像这样:
$(function(){
FB.Event.subscribe('edge.create',
function(response) {
send_fb_like();
}
);
FB.Event.subscribe('edge.remove',
function(response) {
send_fb_unlike();
}
);
function send_fb_like()
{
var business_name = '<%= @consumer.name %>';
alert("You liked"+consumer_name);
}
function send_fb_unlike()
{
var business_name = '<%= @consumer.name %>';
alert("You unliked"+consumer_name);
}
});
它会抛弃这个:
你喜欢<%= @consumer.name %>
。我已经尝试将文件保存为js.erb,但似乎它不知道@consumer是什么。
对什么是最佳方法的想法?
答案 0 :(得分:2)
您最好的选择可能是创建一个应用程序范围的JS对象来存储您需要的值。在页面顶部,您可以向此对象添加元素,它们将可用于链接的脚本。
<script type="text/javascript">
app = app || {}
app.keyName1 = "<%= @variable1 %>";
app.keyName2 = "<%= @variable2 %>";
</script>
答案 1 :(得分:1)
您无法将Ruby代码内联到.js文件中。如果你想使用Ruby代码,你需要创建一个.js.erb文件,然后在其中部分渲染。
# controller
render :partial => "/path/to/js/partial.js.erb"
# inside your JS partial
# you can use <%= @consumer.name %> freely in this file
# and then add the line below to render your normal html.erb file
$("#reviews").append("<%= escape_javascript(render(:partial => '/path/to/partial.html.erb' )) %>");