【问题标题】:Rails Jquery js.erb not reading my instance variables to make comparisonRails Jquery js.erb 没有读取我的实例变量进行比较
【发布时间】:2014-09-11 23:50:31
【问题描述】:

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

.js.erb

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

有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

    我相信您是直接发送您的 .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>
    

    【讨论】:

      猜你喜欢
      • 2011-08-25
      • 1970-01-01
      • 2010-10-31
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-19
      相关资源
      最近更新 更多