javascript - 将 javascript 对象原封不动地传递给 ruby 类
问题描述
我需要将 js 对象存储在 ruby 类中,然后将其完整地传递回 js。
仅在某些情况下,我有一个后备方案,但效率不高。我可以切碎 js 对象并将值作为字符串一一传递,然后将其拼凑在一起,但它有很多数据。
在我的 js 方面,如果我可以保持 js 对象完好无损,我可以简单地将对象传递回 js 并且我已经设置好了。
对于进一步的上下文,我想要做的是存储一个 ace 编辑器会话ace.edit("editor").getSession()
,它返回相当多的数据,如下所示
在 Ruby 类之一中,稍后传递回我的 js。编辑器会话包含很多设置,例如语言模式、编辑器主题、字体大小切换包装,你明白了你在编辑器中的所有设置都需要存储在你的环境中。我已经传回了重要的东西,比如语言和主题,但想要传递整个会话,所以 user-x 尽可能接近在你的环境中使用编辑器
我是 js 的新手,刚刚开始在这个项目中深入研究它,所以如果你可以回答,请分享一些我可以分析的伪代码或片段。提前谢谢
解决方案
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 并忘记所有其他格式
推荐阅读
- javascript - JavaScript 无法滚动
- node.js - azure 应用服务上 NodeJS 应用的持久应用日志
- php - 如何解决错误'对不起,此功能目前不可用:处理此请求时发生错误。请稍后再试。'?
- protractor - 如何从量角器中的表格中获取标题?
- jquery - 如何在按钮单击时使用 jquery 关闭 div 标签中的弹出窗口
- php - 在 Laravel 中计算多个模型
- c# - msbuild and dotnet load different versions of Sdk.targets
- javascript - 我无法为战争游戏分离我的卡片。它们都显示在彼此之上
- javascript - 如何在 Ionic 应用程序中使用随机 npm 库?我想生成一个随机的 6 位数字
- wordpress - 如何在古腾堡自定义块上添加滑块(在编辑器而不是前端)?