より簡単にカスタムディレクティブが定義できるようになった Horn.js v0.1 リリース
卒論の息抜きに色々いじった。
カスタムディレクティブの機能を追加
自分でも作ってても面倒くさかったので、こんな風に簡単にした。下は data-click のサンプル。
Horn.addDirectiveByEachElement "data-click", (view, $el, val) -> $el.on 'click', (view[val].bind view)
data-click付けたエレメントごとにコールバックでリスナーつけている。他にも Horn.addDirectiveByEachValue があるが使い方はソース参照としか言えない。まだドキュメント書く気分ではない。
data-view, data-list-view ディレクティブの追加でより宣言的に
というわけで自分が欲しかったdirectiveを追加する。
テンプレートに外部ビューを植え付ける data-view
, data-list-view
のdirectiveを追加した。
サンプルはこれ https://github.com/mizchi/horn.js/blob/master/examples/layout-with-children/main.coffee
こんな風にテンプレートを書ける。
<div data-template-name="layout" data-child-views="status, statusList" data-attrs=""> <h1>layout</h1> <div data-view='attr:status, class:status'/> <div data-list-view='attr:statusList, class:status'/> </div>
こんな風にテンプレートと変数をマッピングして使える。
class Status extends Horn.View templateName: 'status' class Layout extends Horn.View templateName: 'layout' viewClassMapping: status: -> Status # 使う layout = new Layout layout.attach 'body' layout.status.name = 'foo' layout.status.money = 0 layout.statusList.update [{}, {}, {}]
layoutインスタンスに status: Horn.View, statusList: Horn.ListView のインスタンスが生えてて操作できる。
ちなみにdata-viewのdirectiveはこんな感じで定義してある。
Horn.addDirectiveByEachElement "data-view", (view, $el, val) -> data = parseObjectiveLiteral(val) # hoge:fuga, foo:bar => {hoge:'fuga', foo:'bar'} Cls = view.viewClassMapping[data.class]() cv = new Cls cv.attach $el view[data.attr] = cv
TODO
- (まだ)テスト書く
- (まだ)ドキュメント書く
ポール・グレアムも自作の言語/ライブラリを広める一番の方法は、たまたま優秀なライブラリがその言語で書かれる「トロイの木馬」方式だと言っていたし、なんか作りたい。