我有一个在其中设置实例变量的Rails Controller -
@user_name = "Some Username"
在我的.slim模板中,我正在使用Coffee Engine生成javascript,并希望从client-sie javascript代码中打印出用户名-
coffee:
$(document).ready ->
name = "#{@user_name}"
alert name
但这是正在生成的javascript吗?
$(document).ready(function() {
var name;
name = "" + this.my_name;
alert(name);
}
如何在CoffeeScript代码中访问 Controller 实例变量?
我将其标记为haml,因为我猜haml在使用CoffeeScript时会有同样的问题。
最佳答案
发生的事情是"#{@user_name}"
被解释为CoffeeScript,而不是被评估并注入(inject)到CoffeeScript源代码中的Ruby代码。您在问:“如何将Ruby变量注入(inject)CoffeeScript源代码?”
简短的答案是:不要这样做。 Rails团队做出了一个有意的决定,不支持在3.1版本的模板中嵌入嵌入式CoffeeScript,因为必须在每个请求上编译CoffeeScript会带来巨大的性能开销(就像您必须允许将任意字符串注入(inject)源代码一样,这样做) 。
我的建议是将Ruby变量分别作为纯JavaScript提供服务,然后从CoffeeScript中引用这些变量,例如:
javascript:
user_name = "#{@user_name}";
coffee:
$(document).ready ->
name = user_name
alert name
关于ruby-on-rails - 如何在Slim模板中访问CoffeeScript引擎中的实例变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8108511/