将数据从Ruby传递到Javascript很容易,例如:
if (getline(cin, firstLine)){
...
}
if (getline(cin, secLine)){
...
}
这将发送一个警报,其中包含存储在控制器中警报变量的数据。
但我不知道它是如何在相反的方向工作的,例如,如果我需要将元素<script type="text/javascript">
function change_value(val){
alert ("<%= @alert %>")
}
}
</script>
存储到控制器变量中:
id
真正的交易接下来,由***投降的代码应该是所需的javascript值(@billeable_qts是哈希):
<script type="text/javascript">
function change_value(element){
<% @element_id = *** element.id *** %>
alert ("<%= @element_id %>")
}
}
</script>
答案 0 :(得分:2)
我假设您指的是嵌入式Ruby文件,其类似于js.erb扩展名。
这些实例变量(例如@element_id
)用于生成javascript文件,然后运行客户端(即在浏览器中)
重要的是要指出,变量@element_id
仅用于生成javascript文件,然后您可以在创建javascript文件后将其视为“消失”。
这就是为什么你可以将Ruby变量值“传递”到javascript文件中的原因。但是,当客户端运行回到那些Ruby变量时,你无法传递javascript获取的值,因为它们基本上不再存在,因为它们的唯一目的是创建javascript文件。
因此,用于生成该文件的控制器操作实际上已经达到了它的目的,并且它和它的变量等不再可用。
现在,您似乎有一个javascript变量,获得客户端,您希望在将其发布到js警报之前进行操作。
您有两个选择
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
我希望这会有所帮助。很高兴提供任何额外的澄清。