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