我有一个在其中设置实例变量的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/

10-13 02:15