サンプル https://github.com/kyanny/test-stickit app.js 参照。
view1 の h1 h2 はどちらも model の値で更新される。 view2 の input も同様。しかし view3 の h1 h2 は無視され input のみ値が更新される。なぜか。
getConfiguration の中で handler (モデルの属性値をビューに反映する具体的な方法を示すオブジェクト)を組み立てるときに、
- 一番 generic な handler として $el.text(val) というのが定義されている(この handler は特定の要素向けではないので selector がない)
- フォーム要素の場合はそれぞれ実装が複雑な handler が別に定義されている(input 要素用の handler も)
- セレクタに input 要素がマッチすると input handler が「利用可能な handler」として選択される
- handler は最終的に一個になるので generic handler と選択された handlers が _.extend でマージされる
- 最終的に得られる handler は selector が input 固定になるので他の要素には適用されない
- 結果として h1 h2 要素の値は更新されない
という理由。下のスクリーンショットでいうと、 handlers には三つのオブジェクトが入っていたが(左から generic handler, input handler, observe のマッピング情報)、 config では一つにまとめられてしまっている。この config が handler として使われるので...というからくり。