🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
<!-- 译者:Github@wizadforcel --> 在我们编写了一些主题和包之后,让我们花一些时间来深入了解一些Atom的工作方式。在这一章中,我们会更进一步了解Atom中独特的内部API和系统,甚至查看一些源码来看一看它们是如何很好地工作的。 # 配置API # ## 读取配置 ## 如果你想要编写一个可配置的包,你需要通过`atom.config`来整体读取配置,或者通过`atom.config.get`来读取一个具有命名空间的配置键的当前值。 ``` # read a value with `config.get` @showInvisibles() if atom.config.get "editor.showInvisibles" ``` 或者通过`atom.config.observe`来跟踪任何视图对象产生的修改。 ``` {View} = require 'space-pen' class MyView extends View attached: -> @fontSizeObserveSubscription = atom.config.observe 'editor.fontSize', (newValue, {previous}) => @adjustFontSize() detached: -> @fontSizeObserveSubscription.dispose() ``` `atom.config.observe`方法会使用特定键路径的当前值立即调用提供的回调函数,并且以后当这个值发生改变时也会调用。如果你只希望在下次这个值改变的时候调用回调,使用`atom.config.onDidChange`来代替它。 订阅(Subscription)方法会返回一个一次性的订阅对象。注意上面的例子中,我们如何将订阅保存在`@fontSizeObserveSubscription`实例变量中,以及视图被分离的时候如何处理它。你可以添加多个订阅到`[CompositeDisposable](https://atom.io/docs/api/latest/CompositeDisposable)`中来将它们组合到一起。当视图被分离的时候你可以把它处理掉。 ## 写入配置 ## 虽然`atom.config`的数据在启动时才从`~/.atom/config.cson`加载,但你可以通过`atom.config.set`用编程的方式对其写入。 ``` # basic key update atom.config.set("core.showInvisibles", true) ``` 如果你通过特定键路径来访问包的配置,你也可能像将它们和你包里面的主模块的schema关联起来。更多schema的细节请阅读[配置API文档](https://atom.io/docs/api/latest/Config)。