29727


当然出来ると思ってたのですが上手く動きません。

Riot.jsでカスタムタグ`<tag-a>`を追加する時、  
`<script type='riot/tag' src='tag-a.html'></script>`  
みたいな事書きますよね。  
このtag-aの内部で利用する別のカスタムタグ`<tag-b>`のためのscriptタグを、tag-a.htmlに書きたいのですが、誰か方法を知りませんか？  
ただ単にscriptタグをtag-a.htmlに書いただけではダメでした。

よろしくお願いいたします。

\--追記(unaristさん、ご指摘どうもありがとうございます！)  
誤解されそうな書き方だったので補足します。  
`<script type='riot/tag' src='tag-b.html'></script>`  
を、tag-a.htmlに書きたいのです。よろしくお願いいたします。


CC BY-SA 3.0
2016-10-17T08:52:02.007
29629
2016-10-20T03:06:08.717
2016-10-17T10:22:33.563
18718
18718
question
javascript
Riot.jsにおいて、子や孫のカスタムタグを利用者に意識させずに済む方法


> [スクリプトの動的読込](http://so-zou.jp/web-
> app/tech/programming/javascript/sample/script.htm) は使えるんじゃないですか @BLUEPIXYさん

のコメントをヒントに、それらしい事が実現出来たので共有します。

カスタムタグ本体のhtmlを非同期で読み込む事になるので、読み込みが終わる前にマウントしてしまわぬよう、`riot.mount('*')`は`window.onload`で行います。

カスタムタグ本体に`<script type='riot/tag' src='tag-b.html'></script>`
を書く方法は、残念ながらまだみつかっていません。

代わりに、カスタムタグ毎に取り込み用jsファイルを追加しました。  
tag-a.jsでは、上記のスクリプト動的読込を使い、カスタムタグ本体の  
`<script type='riot/tag' src='tag-a.html'>`  
および、内部で利用するカスタムタグ`tag-b`の取り込みjs  
`<script type='text/javascript' src='tag-b.js'>`  
をbodyタグに追加します。

tag-b.jsでは、本体のtag-b.htmlと、その中で使うカスタムタグを取り込むためのtag-c1.js、tag-c2.jsをbodyに追加……といった具合で、、、あとはお察しいただけるかと。

あまりスマートな方法ではないものの、上手く機能します。  
カスタムタグを配布する場合に役に立ちそうです。

もっといい方法が他に見つかったらぜひ教えてください。


CC BY-SA 3.0
2016-10-18T04:22:12.093
29645
2016-10-19T05:47:20.590
2016-10-19T05:47:20.590
18718
18718
29629
answer


[こちら](https://ja.stackoverflow.com/a/29713/18718)で紹介された`riot.compile()`を使う方法がスマートだったのでメモしておきます。  
`riot.compile('tag-b.html',function(){riot.mount('tag-b')})`  
といった具合で動的に追加できます。


CC BY-SA 3.0
2016-10-20T03:06:08.717
29727
2016-10-20T03:06:08.717
2020-06-17T08:14:45.997
-1
18718
29629
answer