微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从ruby访问Javascript变量

将数据从Ruby传递到Javascript很容易,例如:

<script type="text/javascript">

    function change_value(val){

      alert ("<%= @alert %>")   
      }
    }
</script>

这将发送一个警报,其中包含存储在控制器中警报变量的数据.

但是我不知道它是如何在相反的方向上工作的,例如,如果我需要将一个元素id存储到一个控制器变量中:

<script type="text/javascript">

    function change_value(element){
      <% @element_id = *** element.id *** %>

      alert ("<%= @element_id %>")   
      }
    }
</script>

真正的交易接下来,由***投降的代码应该是所需的javascript值(@billeable_qts是哈希):

<script type="text/javascript">

  function change_value(product){

    <% @billeable_qts[****product.id****] = ***document.getElementById('product.id').value****  %>
    <% @billeable_qts.each do |key, value| %>
       <% alert = "Key = " + key + ", value: " + value.to_s%>
       alert ("product: <%= alert %>")
    <% end %>


  }

</script>

解决方法:

我假设您指的是嵌入式Ruby文件,其中包含类似js.erb扩展名的内容.

那些实例变量,例如@element_id,用于生成一个javascript文件,然后运行客户端(即在浏览器中)

重要的是要指出,变量@element_id仅用于生成javascript文件,然后您可以基本上认为它在创建javascript文件后“消失”.

这就是为什么你可以将Ruby变量值“传递”到javascript文件中的原因.但是,当运行客户端返回到那些Ruby变量时,您无法传递javascript获取的值,因为它们基本上不再存在,因为它们的唯一目的是创建javascript文件.

因此,用于生成文件的控制器操作实际上已经达到了它的目的,并且它和它的变量等不再可用.

现在,看起来你有一个javascript变量,获得了客户端,你想要在js alert中发布之前进行操作.

你有两个选择

1)你可以使用纯javascript操作它.

<script type="text/javascript">

    function change_value(element){
      idToAlert = element.id;
      idToAlert++;
      alert (idToAlert);   
      }
    }
</script>

2)如果出于某种原因需要根据Rails应用程序可以访问的数据库修改值,您可以将其发布到控制器并执行操作然后将其返回到javascript.
(注意:我在这里使用jQuery库来提高效率)

<script type="text/javascript">

function change_value(element){
$.ajax({
  url: "/controller/update_element_id",
  type: "POST",
  data: {"old_element_id": <%= @element_id %>, "new_element_id": element.id},
  success: function(response) {
    alert (response);
  },
  error: function(response) {
    console.log('error: ' + response);
  }
});
}
</script>

Controller#update_element_id可能是JS POST请求的端点,如下所示.

def update_element_id
  item = Model.where(element_id: params["old_element_id"]).first
  item.update_attributes(element_id: params["new_element_id"])
  render json: {element_id: item.element_id}
end

我希望这有帮助.很高兴提供任何额外的澄清.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐