Riotのタグファイルを作る際に、実はタグの外側にもコードを書けます。
タグファイルとJavaScript
ふつう、Riotのタグファイルといえば、以下のようなものをイメージするでしょう。
典型的タグファイル
<tag-name>
<div>
<!-- 略 -->
</div>
<style>
/* 略 */
</style>
<script>
// 略
</script>
</tag-name>
実は、Riotのコンパイラは、タグの外側にJavaScriptを書くことも認めています(テストケースと、その期待される結果)。
JavaScriptを外側に書いた例
alert('foo')
<test-tag>
</test-tag>
コンパイル後の結果
alert('foo')
riot.tag2('test-tag', '', '', '', function(opts) {
});
何に使う?
ブラウザ内コンパイルで使うようなRiotタグだと使いづらいかもしれませんが、Webpackなどに組み込んだ系では、けっこう使いみちがあります(この場合、外側に書いたコードもWebpackの1モジュールとして、無名関数でスコープが切られます)。
- タグ内から別のタグを呼び出している場合に、そのタグを
require
することで、依存関係を明確にする - タグ内で使う別な関数を、事前に
require
しておく - キャッシュなど、全てのタグインスタンスで共有できるデータ
なお、タグ内に書いたJavaScriptコードは、タグのマウントのたびに実行されるのに対して、外側に書いたコードはコード自体の読み込み時(作り方によって違ってきますが、DOMContentLoaded
より前ということも考えられます)に動くので、そのあたりには注意が必要です。