我传递的变量@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");
}
有什么建议吗?
答案 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>