【问题标题】:Inline ruby in :javascript haml tag? [duplicate]:javascript haml 标签中的内联红宝石? [复制]
【发布时间】:2011-10-30 12:31:37
【问题描述】:

嘿,我有办法在haml中做到这一点吗?

:javascript
   var Tab = <%= @tab %>

我可以添加一个助手,我猜是这样的:

<script>
  var Tab = '<%= @tab %>'
</script>

但是使用 HAML 会很好!

【问题讨论】:

    标签: javascript ruby-on-rails ruby haml


    【解决方案1】:

    您可以使用字符串插值语法(#{...}):

    :javascript
       var tab = #{@tab}
    

    不过,请注意正确转义。

    【讨论】:

    • 啊,我确定我试过了!不过谢谢!! :)
    • 很棒的提示,谢谢!我认为 Haml 应该把这个注释放到官方文档中。
    【解决方案2】:

    这是一种糟糕的代码结构方式。

    内联 JavaScript 已经够糟糕了。内嵌 ERb 的内联 JavaScript 会让你直接下地狱。

    JavaScript 应该在外部静态文件中。这样浏览器就可以缓存它们,你可以把 JavaScript 当作真正的编程语言来使用。

    在你的情况下,我会推荐类似的东西:

    (Haml 文件)

    #tab= @tab

    (CSS 文件)

    #tab { display: none }

    (Javascript 文件)

    var Tab = $('#tab').innerHTML();

    这样一来,一切都保持静态和可维护,并且您不会混合使用 JS 和 HTML。

    【讨论】:

    • 我第一次没有注意到的一件事:JavaScript 变量名通常应该以小写字母开头(除非变量引用构造函数)。
    • 它被否决了,因为您不是在回答问题而是在发表意见。有时我使用内联 js 只是为了尝试一些东西并节省文件之间的滑动。后来,一旦工作,我把它放在自己的文件中。所以这个问题不能在没有上下文的情况下被判断为可怕。
    • @MarnenLaibow-Koser 我很乐意解释我的反对意见。您的回答绝对不能帮助 OP 解决他的问题。如果没有任何场合可以接受使用内联 JS,那么 Haml 不会提供过滤器,但它会提供。顺便说一句,这个问题也适用于 Haml 中的所有其他过滤器,其中有很多。 当然内联 JS 经常被误用,但比起对完全合法的问题没有答案,有更好的时间和地点来解释这一点。
    • 否决:不回答问题。
    • "..而且你没有混合 JS 和 HTML" 但是你混合了 js 和 html 将数据临时存储在 dom 中,然后将其加载到 js var 中。怎么样更好?
    猜你喜欢
    • 2015-07-07
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    相关资源
    最近更新 更多