如何在Slim模板中的CoffeeScript引擎中访问实例variables
我有一个Rails控制器,我正在设置一个实例variables –
@user_name = "Some Username"
在我的.slim模板中,我使用咖啡引擎来生成JavaScript,并希望从客户端打印出用户名 – sie javascript代码 –
coffee: $(document).ready -> name = "#{@user_name}" alert name
但是,这是正在生成的JavaScript?
$(document).ready(function() { var name; name = "" + this.my_name; alert(name); }
如何在我的CoffeeScript代码中访问控制器实例variables?
我把这个标记为haml,因为我猜测haml在使用CoffeeScript时会遇到同样的问题。
发生了什么事是"#{@user_name}"
被解释为CoffeeScript,而不是被评估和注入到CoffeeScript源代码中的Ruby代码。 你问:“我怎么注入一个Rubyvariables到我的CoffeeScript源?
简短的回答是:不要这样做。 Rails团队决定不在3.1的模板中支持embedded的CoffeeScript,因为在每个请求上编译CoffeeScript都会产生很大的性能开销(如果允许将任意string注入到源代码中,您必须这样做) 。
我的build议是将你的Rubyvariables分别作为纯JavaScript来提供,然后从你的CoffeeScript中引用这些variables,例如:
javascript: user_name = "#{@user_name}"; coffee: $(document).ready -> name = user_name alert name
我倾向于不惜一切代价避免内联JavaScript。
在HTML中存储variables的一个好方法是使用HTML5数据属性。 这是保持你的javascript不显眼的理想select。
你也可以使用:
$(document).ready -> name = <%= JSON.generate @user_name %> alert name
这是因为JSON是JavaScript的一个子集。