您的位置:首页 > 其它

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
。我们计划在未来实现一个迁移系统,但是现在至少能防止你对旧的状态反序列化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: