kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

TiddlyWiki/Dev - Core Application (4)

TiddlyWiki Core Applicationの続き

  • 動的な振る舞いはふたつの方法で追加できる

から

メッセージ

  • メッセージはユーザによって発信されるイベントで、ウィジェットによって生成される
  • "tm-delete-tiddler"といった型のプロパティを持つ
  • メッセージは親へ親へと送られ、それぞれのウィジェットが処理を試みる
  • ウィジェットdispatchEvent(message)を呼んでウィジェットのツリーの上方へメッセージを送る
  • addEventListner(type,listner)は特定のメッセージタイプに関数を結びつける
  • リスナーがfalseを返したらメッセージは親ウィジェットへと送られる
  • TiddleyWikiコアプラグインではNavigatorWidgetで多くのメッセージを扱う

選択的更新

  • たとえば、"important"というタグの付いたTiddlerをリストするListWidgetは、Tiddlerから"important"タグが削除されたときにはそれを反映するべきである
  • そういった目的のために、ウィジェットrefresh(changedTiddlers)関数を持つ
  • 変更があると、RootWidgetはその子ウィジェットrefreshを呼ぶ
  • 各々のウィジェットはDOMの内容を再表示するかどうかを決め、さらにその子ウィジェットrefreshを呼ぶ
  • テキスト参照のアトリビュートを持つウィジェットrefreshが呼ばれたときは、そのアトリビュートが変更されたTiddlerを参照しているかどうかを確認する

たとえば

  • 検索メカニズムは、EditTextWidgetによってテキスト入力フィールドを表示し、ListWidgetで結果を表示する
  • EditTextWidgetは$:/temp/searchというTiddlerに結び付けられている
  • テキストが変更されると、RootWidgetからrefresh関数が呼び出され、必要に応じて表示が更新される