15 min/d

ぼうずやのにっき

mithril-b-html-plus (仮) をつくった

mithril-b-html-plus (仮)

mithril-b-html-plus をつくった。仮実装なので Gist に。

b-html-plus に format option を足した上で上記のコードを使えばだいたい実現できた。

悩みどころだったのは b-onm.component の扱い。

イベントリスナーの設定するための構文である b-on 。 Vue.js の v-on に相当する b-onb-html/b-html-plus にはない。b-html-plus 自体はデフォルトで string を生成するためのものであって DOM を操作しないのでイベントを設定する余地はない。属性として onchange="f()" のような設定はできるが template(context) として与えられたものを設定するのは無理がある。

対処としてはまずは b-onevents として出力できるように b-html/b-html-plus を変更 (0.2.0) した。それを Mithril 側の attrs として設定するようにした。

m.component はひとまず my-element のように - を含む場合に m.component にするようにした。ただ - を使っていないケースも多いだろうし PascalCase に変換してほしいだろう。ただ現状だと template(context) の context において data と component とが分離されていないので誤爆の危険性がある。例を挙げる。

compile = require './mithril-b-html-plus'

template = compile '''
<div
  @b-text div
'''
template { div: 'hoge' }

このようなコードで - の判定がないと div に対応する 'hoge' を Component と判断してしまう。 { components: { div: Component } } のように別として扱えば良いのかもしれないけど冗長にも思えるので微妙なところだ。

もうすこし検討したい。

その他

昨日 (2015-08-26) 書いた faithcreates/fgb-admin を private にしたら streak が切れた件だけど public に戻した。せっかく毎日続けたものが切れてしまうのはあんまりだからね。