Created
January 29, 2014 05:16
-
-
Save koron/8682242 to your computer and use it in GitHub Desktop.
ChaplinでRactiveを使うのに必要なもの、そのサンプル。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class RactiveView extends Chaplin.View | |
# どの要素にデータを流しこむか指定するセレクタ | |
el: '#main' | |
# テンプレート名、getTemplate で使われる | |
templateName: 'template_empty' | |
# 変更不可: dipose メソッドを正しくオーバーライドするために必要 | |
keepElement: true | |
# Backboneのモデルを直接ViewModelとしてRactiveで使うために必須 | |
# その他のオプションは派生クラスで追加すべし。 | |
ractiveOptions: { | |
adaptors: [ 'Backbone' ] | |
} | |
# optionsをプロパティとして捕捉 | |
constructor: (@options={}) -> | |
super | |
render: () -> | |
# Chaplin.Viewのrenderメソッドを完全にオーバーライド | |
if @disposed | |
return false | |
@container = @getContainer() | |
@template = @getTemplate() | |
@viewModel = @getViewModel() | |
@listeners = @getListeners() | |
@ractive = new Ractive(_.extend({}, @ractiveOptions, { | |
el: @container | |
template: @template | |
data: @viewModel | |
})) | |
@ractive.on(@listeners) | |
dispose: () -> | |
# Chaplin.Viewのdiposeをほぼオーバーライド | |
if @disposed | |
return @ | |
if @ractive | |
@ractive.teardown() | |
@ractive = null | |
@stopListening() | |
super | |
getContainer: () -> | |
return @$el | |
getTemplate: () -> | |
# RailsのJSTを使ってテンプレートデータを取り出している | |
# フレームワークによっては要書き換え | |
return JST[@templateName](@) | |
# ViewModel を返す | |
# 派生クラスでオーバーライドしたほうがよいので、していなかった場合に備えて | |
# メッセージを表示してる | |
getViewModel: () -> | |
console.log('WARN: View#getViewModel must be overriden') | |
return {} | |
# Ractiveに登録するイベントリスナを返す | |
# 派生クラスでオーバーライドしたほうがよいので、していなかった場合に備えて | |
# メッセージを表示してる | |
getListeners: () -> | |
if @options.listeners? | |
return @options.listeners | |
console.log('WARN: View#getListeners must be overriden') | |
return {} | |
# 自身と子供のViewの更新=再描画を促す | |
# 本来ならbindingで自動更新されるが、自動更新されないケースというのが多々存在 | |
# する。そのような時に手動更新を行うメソッド。 | |
update: () -> | |
if @disposed | |
return | |
@ractive?.update() | |
# Propagate update to subviews. | |
for view in @subviews | |
view.update?() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<h1>Empty</h1> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class UserView extends RactiveView | |
# テンプレート名を指定する | |
templateName: 'template_user' | |
getViewModel: () -> | |
return { | |
# TODO: Add some properties for ViewModel. | |
} | |
getListeners: () -> | |
return { | |
# TODO: Add event handlers. | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment