首页 > 解决方案 > 将 javascript 对象原封不动地传递给 ruby​​ 类

问题描述

我需要将 js 对象存储在 ruby​​ 类中,然后将其完整地传递回 js。

仅在某些情况下,我有一个后备方案,但效率不高。我可以切碎 js 对象并将值作为字符串一一传递,然后将其拼凑在一起,但它有很多数据。

在我的 js 方面,如果我可以保持 js 对象完好无损,我可以简单地将对象传递回 js 并且我已经设置好了。

对于进一步的上下文,我想要做的是存储一个 ace 编辑器会话ace.edit("editor").getSession(),它返回相当多的数据,如下所示

在此处输入图像描述

在 Ruby 类之一中,稍后传递回我的 js。编辑器会话包含很多设置,例如语言模式、编辑器主题、字体大小切换包装,你明白了你在编辑器中的所有设置都需要存储在你的环境中。我已经传回了重要的东西,比如语言和主题,但想要传递整个会话,所以 user-x 尽可能接近在你的环境中使用编辑器

我是 js 的新手,刚刚开始在这个项目中深入研究它,所以如果你可以回答,请分享一些我可以分析的伪代码或片段。提前谢谢

标签: javascriptjqueryruby-on-railsrubyace-editor

解决方案


JSON 是以字符串形式传输复杂数据的标准方式。

JS:

var editor = ace.edit("editor");

editor.getSession().on("change", function () {
    var session = ace.edit("editor").getSession();
    var neededData = {};
    neededData.mode = session.mode;
    neededData.fontSize = session.fontSize;
    //passing the mode to input
    $('input[name="mode"]').val(JSON.stringify(neededData));
});

红宝石:

editor_session_hash = JSON.parse(params[:mode])

现在,您将以 ruby​​ 哈希的形式获取整个会话。您的整个方法可以大大改进,但这完全是另一回事

在广泛的范围内,您应该始终将对象序列化(您可以在 Google 上搜索该术语)一侧为字符串,然后在另一侧对其进行解析。有几种已知的序列化格式,但现在您可以停止使用 JSON 并忘记所有其他格式


推荐阅读