Component
...

Warning

BaseComponent というのもあるが、こちらは UI の構成要素のベースクラスで、Component とは無関係なので注意されたい。

Obsidian において、なんらかの意味でオン (load) したりオフ (onunload) したりするものを汎用的に表すクラス。

いろんなものが Component のサブクラスである。

Component の間には、 addChild メソッドを使って親子関係を定義できる。子 Component は、親 Component が unload されると自動で自分も unload される。これを使って、たとえばあるプラグインを構成する各要素を分割して Component クラスのサブクラスとして定義し、それらを addChild するという方法がとれる。たとえば Dataview や Datacore はそうしている。

#unexposed Component オブジェクトは以下の 3 つのプロパティをもつ。

  • _loaded: boolean
    • この Component が load されている(オンになっている)か否か
  • _events: (() => any)[]
    • この Component が unload される(オフになる)ときに実行されるお片付けコールバック関数たち。
    • 各コールバックは register メソッドで登録する。
    • その他の register... メソッドたちも、register メソッド経由で _events にコールバックを登録している。
  • _children: Component[]
    • この Component の子 Component たち

load
...

load() メソッドを直接実行するか、ほかの Component に addChild することで(親 Component がすでに load されていれば即座に、そうでなければ親が load されるタイミングで)Component を load できる(" オン " の状態にできる)。

load 時についでに実行するべき処理は onload() メソッドをオーバーライドして記述する。デフォルトではなにもしない。典型的には registerEvent とかをここに書く。

Note

Component の unload() メソッドを呼んだのに onunload() の内容が実行されない...というときは、そもそもその Component を load し忘れている可能性が高い。