LoginSignup
3
2

More than 5 years have passed since last update.

RiotのカスタムタグにJSONを渡す

Posted at

Riotのタグに値を渡すにはいくつかの方法がありますが、JSONを渡そうとして少し引っかかりました。

おことわり

あらかじめコメントしますが、本来あまりよろしくない使い方だ、というのはよく承知しています。できれば、別な手段を使ってください。

Riotへの値の渡し方

Riotのタグに必要な値を供給するには、大きく分けて3つの方法があります。

  1. タグ内部に書いたコードから(APIなどを叩いて)直接取ってくる
  2. RiotをマウントしたJavaScriptコードから、タグインスタンスに値を直接渡す
  3. タグに属性として書いておく

なお、カスタムタグ同士をネストする場合は、attr={value}のように書けば、JavaScriptの変数として値も渡されるようになっています。

外側から渡そうとして失敗

PHPで書いていた周辺のプログラムとの関係もあって、カスタムタグの引数にJSONを渡したくなりました。ところが、受け取ったデータは渡したものといても似つかぬものとなっていました。

JSONで渡せる値の種類

JSONには、以下の種類の値があります。

  • 文字列("String"
  • 数値(5.8
  • truefalsenull
  • 配列([]
  • 連想配列({}

Riotに渡したときにうまく動かなくなったのは、連想配列でした。

原因が判明

Riot.jsには、条件のかかるクラス名をclass={foo: true, bar: false}のような形で簡潔に書けるようにする構文がありますが、これが外部から渡したJSONにも効いてしまった、というのが真相でした。

とりあえず、外から渡すときに余計な文字を先頭に追加して中カッコのパースを避けて、それからタグ内で余計な文字を除去してJSON.parseとすることで、回避はできるようになりました。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2