Rails Jquery js.erb没有读取我的实例变量来进行比较

时间:2014-09-11 23:50:32

标签: javascript jquery ruby-on-rails-4 erb

我传递的变量@tagging_done是真还是假。当我放一个binding.pry时,我可以看到变量在那里并且确实有一个值 - 当我检查它是否返回true时,tagging_done === true或甚至tagging_done == true它告诉我它返回true但我从未达到逻辑的真实部分。 - 当我将其更改为true == true时,它当然会正确执行。

.js.erb

var tagging_done = "<%=@tagging_done%>";
if (tagging_done === true) {
 alert("here");
} else {
    alert("no here");
}

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我相信你直接发送你的.js.erb,即。而不是你设置@tagging_done变量的控制器。在我看来,你应该做一些事情:

<script>js_call("<%=@tagging_done%>");</script>
来自.html.erb模板的

和.js.erb封装了函数中的内容:

function tagging_done() {
  if (tagging_done === true) {
    alert("here");
  } else {
    alert("no here");
  }
}

还有一些问题,例如可能发生XSRF / XSS攻击(尝试在发送之前将值转换为布尔值),如下所示:

<script>js_call(<%=!!@tagging_done%>);</script>

!!不是运营商。它是一个运算符!(即否定)应用两次,这是将任意值转换为布尔值的常用习惯用法。

另一件事是,你需要确保在加载javascript后用html代码调用你的js。如果你使用jquery(你可能会这样做),你可以在一个非常简单的方式完成整个DOM树之后推迟执行:

<script>$(function(){js_call(<%=!!@tagging_done%>);});</script>