Atom飞行手册翻译: 4.4 Atom中的序列化
2015-08-07 19:48
134 查看
Atom中的序列化
当一个窗口被刷新,或者从上一次会话恢复的时候,视图和它相关的对象会从JSON表达式中反序列化,它们在窗口上一次关闭时储存。要使你自己的视图和对象兼容刷新,你需要让它们很好地执行序列化和反序列化。包的序列化钩子
你的包的主模块可以选择包含一个serialize方法,它在你的包反激活之前被调用。你应该返回JSON,它会交还给你作为下次调用
activate的参数。在下面的例子中,这个包将一个
MyObject的实例在刷新过程中保持相同的状态。
module.exports = activate: (state) -> @myObject = if state atom.deserializers.deserialize(state) else new MyObject("Hello") serialize: -> @myObject.serialize()
序列化方法
class MyObject atom.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 MyObject atom.deserializers.add(this) @version: 2 @deserialize: (state) -> ... serialize: -> { version: @constructor.version, ... }
你的可序列化类可以带有一个可选的
@version类级属性,并且在序列化的状态中持有
version键。反序列化的时候,Atom只在版本匹配的时候尝试对其反序列化,否则返回
undefined。我们计划在未来实现一个迁移系统,但是现在至少能防止你对旧的状态反序列化。
相关文章推荐
- 使用MySQL Workbench远程管理工具进行远程管理Mysql的错误及解决办法
- LeetCode(129) Sum Root to Leaf Numbers
- sendmail 发送html 的邮件
- MDK5 and STM32Cube
- POJ1505:Copying Books 解题心得
- Ubuntu 14.10 下Server版本中文乱码问题
- 杭电2149Public Sale
- 12.1 Image classification with deep learning常用模型
- 海量Web日志分析 用Hadoop提取KPI统计指标
- C++ 指针函数介绍
- jsoncpp详解
- Oracle经典查询练手第三篇
- Ensemble Learning
- 各大网站CSS代码初始化集合
- 快速幂模板
- mysql物理级别热备脚本
- log4j的基本配置参数
- [LeetCode]Contains Duplicate II
- Android学习日志: 执行.getResponseCode()方法时出现错误常
- 【JavaMail开发总结】开发前的配置