在 :javascript haml 标签中使用内联 Ruby?

46

嘿,我能用Haml实现这个吗?

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

我想我可以添加一个帮助器,类似于:

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

但使用HAML会更好!

2个回答

103
你可以使用字符串插值语法 (#{...}) :
:javascript
   var tab = #{@tab}

请注意正确进行转义。


啊,我确信我试过了!不过还是谢谢你!! :) - Alex Fox
太棒了,谢谢!我认为Haml应该将这个提示放入官方文档中。 - CodeGroover

-23

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

内联JavaScript已经够糟糕了。内联JavaScript中嵌入ERb会让你直接陷入地狱。

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

在您的情况下,我建议使用以下内容:

(Haml文件)

#tab= @tab

(CSS文件)

#tab { display: none }

(Javascript文件)

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

这样一来,所有内容都保持静态和可维护性,并且您不会混合JS和HTML。


5
之所以被踩是因为您没有回答问题,而是陈述了自己的观点。有时我会使用内联js来尝试一些东西并节省在文件之间切换的时间。后来,一旦它工作正常,我会把它放到自己的文件中。因此,如果没有上下文,这个问题就不能被评判为糟糕。 - Kris
8
我很乐意解释一下我的投票理由。你的回答对于帮助提问者解决问题没有任何作用。如果内联JS从来都不能被接受,那么Haml就不会提供过滤器了,但它确实提供了。顺便说一下,这个问题也适用于Haml中的每一个其他过滤器,其中有很多。当然,内联JS经常被误用,但是在一个完全合法的问题的非答案上解释这一点肯定有更好的时间和地点。 - Ian Greenleaf Young
4
被downvote:未回答问题。 - fotanus
2
"..而且你没有混合使用JS和HTML",但是你正在混合使用js和html,在DOM中暂时存储数据,然后将其加载到js变量中。这样做有什么好处? - Mauricio
1
我同意,我不知道为什么你被踩了! - Leo Gasparrini
显示剩余19条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接