【发布时间】:2014-04-15 19:25:21
【问题描述】:
现在这让我整了整整两个晚上都抓狂了——我正在为 Intercom.io 安装 JavaScript,这需要在结束 </body> 标记之前放置一段 sn-p 代码,像这样:
<script id="IntercomSettingsScriptTag">
window.intercomSettings = {
// TODO: The current logged in user's email address.
email: "john.doe@example.com",
// TODO: The current logged in user's sign-up date as a Unix timestamp.
created_at: 1234567890,
app_id: [redacted]
</script>
听起来很简单,但我的问题是我需要使用 Ruby 变量将当前登录用户的电子邮件地址交换到 email 字段 - 它应该只是一个简单的 #{@user.full_name}(或者至少我认为是的,我只是个初学者)。
但是,Slim 阻止我这样做,因为它不执行变量,它只是在浏览器的源代码中按原样打印整个代码 sn-p。我认为这个问题类似于这个问题:How to access instance variables in CoffeeScript engine inside a Slim template
这是我的 Slim 代码:
|<script id="IntercomSettingsScriptTag">
window.intercomSettings = {
// TODO: The current logged in user's email address.
email: "#{@user.email}",
// TODO: The current logged in user's sign-up date as a Unix timestamp.
created_at: #{@user.created_at.to_i},
app_id: [redacted]
};
</script>
上述情况使 Slim 崩溃,页面甚至无法加载。我也尝试使用javascript: Slim 函数在 sn-p 之前声明变量,如上面的链接中所示。没有运气。
还有其他人对如何将变量传递到 JavaScript 有任何想法吗?非常感谢一些指点。谢谢!
已解决
这是有效的代码:
- if user_signed_in?
script id="IntercomSettingsScriptTag"
|
window.intercomSettings = {
// TODO: The current logged in user's full name
name: "#{@current_user.full_name}",
// TODO: The current logged in user's email address.
email: "#{@current_user.email}",
// TODO: The current logged in user's sign-up date as a Unix timestamp.
created_at: #{@current_user.created_at.to_i},
app_id: "eac384da45babdcac214d669601f1a29632f0d97"
};
【问题讨论】:
标签: javascript ruby-on-rails ruby slim-lang