博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Atom飞行手册翻译: 4.4 Atom中的序列化
阅读量:7087 次
发布时间:2019-06-28

本文共 1257 字,大约阅读时间需要 4 分钟。

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。我们计划在未来实现一个迁移系统,但是现在至少能防止你对旧的状态反序列化。

转载地址:http://vjwql.baihongyu.com/

你可能感兴趣的文章
Cacti 备份与迁移
查看>>
Linux磁盘分区-GPT分区
查看>>
Windows的结构化异常处理 .
查看>>
不安装Oracle客户端也能使用PL/SQL
查看>>
我的友情链接
查看>>
goland
查看>>
makefile 关键字
查看>>
rocketmq命令行自动补全工具
查看>>
了解人工智能与智能系统中的先驱人物
查看>>
简洁常用权限系统的设计与实现(六):不维护节点的深度level,手动计算level,构造树 (把一颗无序的树,变成有序的)...
查看>>
最近2个月的生活
查看>>
有哪些问题应该得到解决?
查看>>
FineReport中如何自定义登录界面
查看>>
元素始终居浏览器窗口中间的位置
查看>>
Docker持续部署图文详解 | 高效运维最佳实践06
查看>>
NoSQL生态系统
查看>>
DELPHI自定义事件
查看>>
江苏钢铁业联合重组胎动 重整方式多元化
查看>>
为何3D打印技术普及一直很慢?因为人们还不够了解这项技术
查看>>
Linux的常用目录(Ubuntu)
查看>>