Atom中的序列化

当一个窗口被刷新,或者从上一次会话恢复的时候,视图和它相关的对象会从JSON表达式中反序列化,它们在窗口上一次关闭时储存。要使你自己的视图和对象兼容刷新,你需要让它们很好地执行序列化和反序列化。

包的序列化钩子

你的包的主模块可以选择包含一个serialize方法,它在你的包反激活之前被调用。你应该返回JSON,它会交还给你作为下次调用activate的参数。在下面的例子中,这个包将一个MyObject的实例在刷新过程中保持相同的状态。

module.exports =activate: (state) ->@myObject =if stateatom.deserializers.deserialize(state)elsenew MyObject("Hello")serialize: ->@myObject.serialize()

序列化方法

class MyObjectatom.deserializers.add(this)@deserialize: ({data}) -> new MyObject(data)constructor: (@data) ->serialize: -> { deserializer: 'MyObject', data: @data }

.serialize()

你想要序列化的对象需要实现.serialize(),这个方法需要返回一个序列化的对象。而且它必须包含一个叫做deserializer的键,它的值为一个已注册的反序列化器的名字,它能够转换对象剩余的数据。它通常是类的名称本身。

@deserialize(data)

另一方面是deserialize方法,它通常是个类级的方法,位于实现serialize方法相同的类中。它的作用是将一个上一次serialize调用返回的状态对象转化为一个真正的对象。

atom.deserializers.add(class)

你需要在你的类中调用atom.deserializers.add方法来使它对反序列化系统可见。现在你可以带着serialize返回的状态调用全局的deserialize方法,你的类中的deserialize会自动被选择。

版本控制

class MyObjectatom.deserializers.add(this)@version: 2@deserialize: (state) -> ...serialize: -> { version: @constructor.version, ... }

你的可序列化类可以带有一个可选的@version类级属性,并且在序列化的状态中持有version键。反序列化的时候,Atom只在版本匹配的时候尝试对其反序列化,否则返回undefined。我们计划在未来实现一个迁移系统,但是现在至少能防止你对旧的状态反序列化。

Atom飞行手册翻译: 4.4 Atom中的序列化相关推荐

  1. Atom飞行手册翻译: 3.9 从Textmate中转换

    从Textmate中转换 可能在Textmate中有你喜欢或者使用过的主题和语法,并且你想要把它们转换到Atom中.如果是这样的话,你很幸运,因为有很多工具可以用来转换它们. 转换 TextMate ...

  2. Atom飞行手册翻译: 3.7 调试

    调试 Atom拱了一些工具来帮助你理解预料之外的行为和调试问题.这篇指南介绍了一些工具和方法用于帮助你调试,以及提供了一些提交工单(issue)时的帮助信息. 升级到最新版本 你可能遇到了在最新版本已 ...

  3. Atom飞行手册翻译: 1.3 Atom基础

    Atom基础 既然Atom在你的系统中已经安装了,让我们启动.配置并且熟悉这一编辑器吧. 当你首次启动Atom时,你会看到这样一个界面: 这是Atom的欢迎界面,它会给你一些很好的建议,关于如何开始使 ...

  4. Atom飞行手册翻译: 3.8 编写spec

    编写 spec 我们已经通过一些例子查看并编写了一些spec,现在是更进一步查看spec框架本身的时候了.确切地说,你在Atom中如何编写测试呢? Atom使用Jasmine作为spec框架.任何新的 ...

  5. Atom飞行手册翻译: 3.5 创建主题

    创建主题 Atom的界面使用HTML渲染,并且通过Less来定义样式,它是CSS的超集.不要担心之前从未听说过Less,它类似于CSS,但是带有一些便捷的扩展. Atom支持两种主题:UI和语法.UI ...

  6. Atom飞行手册翻译: 2.13 基本的自定义

    基本的自定义 在我们感受到Atom中所有东西的便利之后,让我们看看如何改进它.可能有一些快捷键你经常使用但是感觉很别扭,或者一些颜色不是十分适合你.Atom具有惊人的灵活性,所以让我们对它做一些力所能 ...

  7. Atom飞行手册翻译: 2.12 在Atom中写作

    在Atom中写作 虽然Atom通常可能用来编写软件的代码,但是它还可以用来高效地编写文章.这通常采用一些标记语言,比如说Markdown和Asciidoc(也就是英文手册所用的格式)来完成.下面我们会 ...

  8. Atom飞行手册翻译: 2.11 Atom中的版本控制

    Atom中的版本控制 对于任何项目来说,版本控制都是很重要的一个方面.Atom集成了一些基本的Git和Github功能. 检出(checkout)HEAD中的版本 cmd-alt-Z快捷键检出当前文件 ...

  9. Atom飞行手册翻译: 2.2 在Atom中移动

    在Atom中移动 用鼠标和方向键,简单地在Atom中移来移去非常容易,然而Atom有一些快捷键,可以让你把手一直放到键盘上,更快速地浏览文档. 首先,Atom自带许多Emacs的快捷键来浏览文档.要想 ...

最新文章

  1. 2022-2028年中国能源期货市场深度调研及投资前景预测报告
  2. 通过事件同步两个窗体之间的数据
  3. 【AtCoder】diverta 2019 Programming Contest 2
  4. API网关正在经历身份危机
  5. Android 实践项目开发二
  6. Java.Lang.NoSuchMethod 错误
  7. SQL Server数据库事务处理详解(MSDN网上资源)
  8. 最大熵模型与EM算法及python实现
  9. 火狐扩展教程_4个值得一试的Firefox扩展
  10. 【面试经历】问题总结
  11. 满分室间质评之GATK Somatic SNV+Indel+CNV+SV(下)性能优化
  12. 网络爬虫Matplotlib
  13. windows10关闭防火墙
  14. 基于STM32U5片内GPDMA Burst传输应用示例
  15. 我的物联网项目(十五) 微服务业务拆分
  16. Java报错---Cannot refer to the non-final local variable user defined in an enclosing scope
  17. 两种方法为WordPress添加用户自定义头像功能
  18. 【JavaScript-内置对象】找对象,那家好,内置对象错不了,方便简单,还好用
  19. maya骨骼架设、蒙皮绑定与权重修正
  20. 论文超详细精读|六千字:ST-GCN

热门文章

  1. 26. GD32F103C8T6入门教程-CAN外设回环测试
  2. boost operator 实例代码
  3. 【蓝桥杯嵌入式】【STM32】11_2016_第七届_蓝桥杯_省赛_电压测量监控设备
  4. 【C语言】Pillow(数据溢出问题)
  5. 初识OpenFlow协议
  6. 回溯算法 思路清晰,通俗易懂!!!!!!!
  7. 报送数据标准校验java_Java:数据校验 - osc_gaqp1a2z的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. 获取并编译linux源码,linux – 从源代码编译软件:如何收集依赖项列表?
  9. 【Java数据结构与算法】第十七章 二分查找(非递归)和分治算法(汉诺塔)
  10. 力扣剑指 Offer 17. 打印从1到最大的n位数