在HAML中显式调用Javascript函数

时间:2013-02-24 20:47:15

标签: javascript ruby-on-rails ruby ruby-on-rails-3.1 ruby-on-rails-3.2

我在HAML视图中有一个if语句,检查是否有flash[:notice],如果是,我想要一个javascript警告框,弹出其中的通知消息。这可能吗?

2 个答案:

答案 0 :(得分:1)

为什么要把它放在你看来?您可以使用application.js (或管道中任何其他包含的JS文件)中的Javascript来完成此操作。你应该避免将Javascript直接放入你的视图(这通常是不好的做法)。以下HAML

#flash= flash[:notice]

会产生类似

的HTML
<div id="flash">Your notice message here</div>

application.js中你可以做类似的事情

$(function() {
  if ($('#flash').get(0)) {    // check if the div exists
    alert($('#flash').text()); // throw an alert() with the div's text
  }
});

也许这可以很好地满足你的目的,但是如果你不希望flash消息文本出现在所有的HTML中,那么有更好的方法可以做到这一点(即将flash消息分配给Javascript变量,已附加到<head>代码中的<script>。)

答案 1 :(得分:0)

它有点笨拙,但您可以在HAML的javascript过滤器中使用#{},如下所示:

- unless flash[:notice].empty?
  :javascript
    alert("#{flash[:notice]}");