Skip to content
jysperm edited this page Jul 15, 2015 · 4 revisions

这个页面描述的是正在开发中的 v0.9 版本实现的特征。

建议阅读 插件付费计划

元件(Component)定义了一项面向用户的服务的模板,用户可以依据元件来创建「元件的实例」来享受服务。

在不引起歧义的情况下,下文可能会用「元件」来代指「元件的实例」。

  • 元件由 插件 定义,一个插件可以定义若干种元件
  • 元件的实例可以被用户创建和销毁
  • 元件的实例可以在物理 节点 间转移、可以在用户之间转移所有权、可以由用户授权给其他用户
  • 创建和使用元件的实例的权限由 付费计划 授予用户,当失去权限后,元件的实例会被销毁

元件由插件通过 Plugin.registerComponent 注册:

linuxPlugin.registerComponent
  name: 'linux'

  initialize: linux.createUser
  destroy: linux.deleteUser

  packing: ->
  unpacking: ->

  register_hooks:
    'account.resources_limit_changed':
      timing: 'every_node'
      action: linux.setResourceLimit

    'view.panel.styles':
      timing: 'available'
      path: '/plugin/linux/style/panel.css'

Name

每一项元件都有一个形如 plugin_name.component_name 的名字,如果 component_nameplugin_name 相同,则可以缩写为 plugin_name.

Initialize, Destroy

initializedestroy 定义了元件的实例被创建时所需要执行的操作:

initialize: (component, callback) ->
  callback err

destroy: (component, callback) ->
  callback err

它们均接受两个参数,分别是元件信息,和一个回调函数,回调函数的第一个参数用于错误处理。

Packing, Unpacking

用于在物理节点间转移,尚未实现。

Register Hooks

register_hooks 用于注册「元件钩子」,与插件钩子不同,元件钩子提供了一个 timing 选项,该选项描述了钩子会在什么情况下被执行。

timing 为不同的值时,传递给 action 的参数也不同,下面列出了 timing 可能的值和 action 的测试:

  • always 总是执行一次,等价于插件钩子

    action: (callback) ->

  • available 在用户可以创建此元件时执行一次

    action: (account, callback) ->

  • once 用户拥有此元件时执行一次

    action: (account, components, callback) ->

  • every 用户每拥有一个此元件时执行一次

    action: (account, component, callback) ->

  • every_node 用户每在一个节点拥有此元件时执行一次

    action: (account, node, components, callback) ->

Clone this wiki locally