一応、公式読み漁りはコレでラスト。
てか書き溜めてたのすっかり忘れてた。
最後はViewです。
Backbone.jsのView
導入時のフレーズにもあった、Modelの更新を即座にキャッチしてViewを最新化できるからBackboneはすごいのよっていう部分。
どうやってDOMのソレとModelの更新を結びつけるかがキモっぽい。
- extend
- constructor / initialize
- el
- $el
- setElement
- attributes
- $ (jQuery or Zepto)
- render
- remove
- delegateEvents
- undelegateEvents
Viewの生成
- extend
- constructor / initialize
- el
- $el
var PlayList = Backbone.View.extend({ initialize: function(){ // View! } }); var playlist = new PlayList({ model: Song, tagName: 'li' });
コンストラクタをnewするときに、以下のオプションは直接指定可能。
- model
- collection
- el
- id
- className
- tagName
- attributes
基本的にViewはelという要素をもってて、それにModelのデータをあわせてDOMを生成する。
何も指定してない場合はdivになるらしい。
そして、jQueryかZeptoを使ってればそれらでラップされたオブジェクトへも、$elでアクセスできるようになる。
Viewの要素へのアクセス
- setElement
- attributes
- $ (jQuery or Zepto)
- remove
setElement
いったん生成したViewのターゲットを変えたい時に使う。
attributes
生成したViewに指定したelの情報を取得したいときに。
$
基本的にViewのel以下のDOMツリーに大しては、$を使ってアクセスする。
それだけで$(hoge, el)とか$(el).find(hoge)のようにスコープを絞った状態で扱える。
remove
DOMからViewを削除。
貼ってたイベント系も一緒に削除してくれるそうな。
Viewの描画
- render
DOMへの落とし込みに使う関数。
UnderscoreのテンプレートやったりHandlebarsやったり、何かと自分の状況に応じて拡張することになる関数。
var PlayList = Backbone.View.extend({ el: $('ul'), initialize: function(){ this.render(); }, render: function(){ this.$el.html(); return this; } }); new Playlist();
Viewって概念はすごくあやふやですね・・。
DOMそのものでもなければ、イベントをBindするだけでもなく・・・、うーむ。
ロジック以外の見せ方に関するもの全て、みたいな。
イベントまわり
- delegateEvents
- undelegateEvents
View内の要素におけるイベントの付与とか。
var PlayList = Backbone.View.extend({ events: { 'click .btn.play': 'play', 'click .btn.stop': 'stop', 'mouseover .info': 'showInfo' }, play: function(){}, stop: function(){}, showInfo: function(){}, el: $('ul'), initialize: function(){ this.render(); }, render: function(){ this.$el.html(); return this; } }); new Playlist();
実態はjQueryのon/offみたい。
eventsで定義するのと、initializeで指定するのも多分一緒。
あくまでユーザーの操作によって発火させたいイベントのことで、Modelが更新されたとかそういうのとは別。
ただ逆に、Modelの更新を知らせる処理とかは、ココに書くしか無い。
所感
MVCというのかMVPというのか、巷では色々あるみたいですが、意味を見いだせるレベルに達していない身としては、だいたいこんな感じってのがわかっただけでもよしとします。
さっさとサンプル作ろう、そうしよう。