gpt4 book ai didi

javascript - 从 ruby​​ 访问 Javascript 变量

转载 作者:行者123 更新时间:2023-12-01 02:30:45 28 4
gpt4 key购买 nike

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

<script type="text/javascript">

function change_value(val){

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

这将发送一个警报,其中包含存储在 Controller 警报变量中的数据。

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

<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>

最佳答案

我假设您指的是一个带有 js.erb 扩展名的嵌入式 Ruby 文件。

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

这里需要指出的是,变量 @element_id 仅用于生成 javascript 文件,那么在创建 javascript 文件后,您基本上可以认为它“消失”了。

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

因此,用于生成该文件的 Controller 操作基本上已达到其目的,并且它及其变量等不再可用。

现在,您似乎有一个从客户端获取的 JavaScript 变量,您希望在将其发布到 js 警报之前对其进行操作。

你有两个选择

1) 你可以使用纯 JavaScript 来操作它。

<script type="text/javascript">

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

2) 如果由于某种原因需要根据 Rails 应用程序有权访问的数据库值等内容修改该值,您可以将其发布到 Controller 和操作,然后将其返回到 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

我希望这有帮助。很高兴提供任何额外的说明。

关于javascript - 从 ruby​​ 访问 Javascript 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48330579/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com