flight入門

33
Flight入門 株式会社ブリリアントサービス 八木 俊広 201331

Upload: toshihiro-yagi

Post on 07-Jul-2015

2.282 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Flight入門

Flight入門株式会社ブリリアントサービス八木俊広 2013年3月1日

Page 2: Flight入門

自己紹介

所属:品川事業所カスタマー開発部

名前:八木俊広

Twitter: @sys1yagi

最近:

mrubyちょいやっている流れでMobiRubyをちょいやってる。キャー@masuidriveさ~ん。

Node.jsで人工無脳作ってる

わかめに言われてFlightに入門中

Page 3: Flight入門

アジェンダ

Flightってなに?

Flightの特徴

デモアプリ

Flightの導入

Flightの使い方

まとめ

Page 4: Flight入門

対象読者

@vvakame

Page 5: Flight入門

Flightってなに?

Twitter社が提供しているWebのフロントエンド用フレームワーク

Twitter社で使われているらしい

https://github.com/twitter/flight

Page 6: Flight入門

Flightの特徴

コンポーネントベースだ

イベントドリブンだ

何がおいしいか

こういう時はつらそう

Page 7: Flight入門

コンポーネントベースだ

DOM Component

DOM

DOM Component

attach

attach

attach

Module

mixin

HTML界 JS界

Page 8: Flight入門

コンポーネントベースだ

DOM Component

DOM

DOM Component

attach

attach

attach

Module

mixin

HTML界 JS界

互いに疎

Page 9: Flight入門

イベントドリブンだ

ComponentDOM1 1

DomとComponentは1:1の関係。

ComponentはDomへの参照を持つ

Page 10: Flight入門

イベントドリブンだ

ComponentDOM1 1

Button

clickblur

Componentでイベントコールバックを登録

イベントの処理を行う

on(“click”, function);on(“blur”, function);

Page 11: Flight入門

イベントドリブンだ

ComponentDOM1 1

ComponentDOM1 1

Button

clickblur

DIV

超えられない壁

結果を他Componentにも渡したい

Page 12: Flight入門

イベントドリブンだ

ComponentDOM1 1

ComponentDOM1 1

Button

clickblur

DIV

超えられない壁

trigger(“onChangeData”, data);

on(“onChangeData”, function);

Page 13: Flight入門

イベントドリブンだ

Component

Component

clickblur

trigger(“onChangeData”, data);

on(“onChangeData”, function);

Component

on(“click”, function);on(“blur”, function);on(“changedSchedule”, function);

trigger(“changedShcedule”, schedule);

Domイベントの他独自にイベント定義が可能。イベントの送受信でComponent間はやりとりを行う。

Page 14: Flight入門

イベントドリブンだ

Component

Component

clickblur

trigger(“onChangeData”, data);

on(“onChangeData”, function);

Component

on(“click”, function);on(“blur”, function);on(“changedSchedule”, function);

trigger(“changedShcedule”, schedule);

Domイベントの他独自にイベント定義が可能。イベントの送受信でComponent間はやりとりを行う。

互いに疎

Page 15: Flight入門

何がおいしいか

DomとComponentが互いに疎

機能をコンポーネント単位で設計する。依存関係、責務についての意識高まる

イベント連携で疎結合。テストもしやすそう

実装方法が統一されている。

再利用性!

Page 16: Flight入門

こういう時つらそう

コンポーネントで定義されているattrやtriggerをドキュメント化とかしてないと大変そう

動的にappendしたElementをコンポーネントにattachするのがめんどい

アプリケーションのコンテキストに依存したコンポーネントを作りがちなので設計がむずい

Page 17: Flight入門

デモアプリ

Node.js+express+jade+mongoose

MongoDB

Flight

jQuery

requirejs

es5-shim

bootstrap

https://github.com/sys1yagi/flight_sample

Page 18: Flight入門

構造

大体以下の様に構成を分けてる

Flight様

データ操作、通信周りのコンポーネント

UI操作用のコンポーネント

画面のDOMのアタッチ等を行う

Page 19: Flight入門

Flightの導入

まずBower

component.jsonを書く

bower install

必要なscriptを読み込ませる

Page 20: Flight入門

Bower?

Page 21: Flight入門

component.json

component.jsonに書いたdependenciesをインストールしてくれる

Page 22: Flight入門

必要なjsを読み込む

※↑はjadeの構文です。普通に<script>とかでももちろんおっけー

Page 23: Flight入門

Flightの使い方

コンポーネントを作る

attachToでDOMにアタッチ

ね、かんたんでしょ?

trigger

mixin

advice, compose,debbug(まださわってない)

Page 24: Flight入門

コンポーネントを作る

requirejsのdefineメソッドを使ってコンポーネントを定義します。

依存するモジュール。ここではFlightコンポーネントの定義なのでflight/lib/componentを読みこんでいる

モジュールロード完了のコールバック、コンポーネント定義を初期化して返す。

コンポーネントが持つデフォルト属性。attachToの時渡せる

コンポーネント内のメソッド

イベントを発行してる。他コンポーネントが受け取るかも

DOMのアタッチが終わった後に呼び出される。onClickをthis.setNameで実行する様に登録してる。

set_name.js

Page 25: Flight入門

attachToでDOMにアタッチ

コンポーネントを読み込む

アタッチ対象のセレクタ

コンポーネントにセットする属性

Page 26: Flight入門

ね、簡単でしょ?

Page 27: Flight入門

trigger

todo_list_controller.js

load_list.js

登録

実行

Page 28: Flight入門

mixin

module作ってがっちゃんこ

Page 29: Flight入門

mixin

モジュールを読み込む

Mixin!

モジュールのメソッドが使える

blurイベントの処理はui_controller側で勝手に登録してる

Page 30: Flight入門

advice, compose, debbug

advice

なんか既存メソッドの前後に実行するメソッドを登録出来るらしい

compose

mixin実現の為に内部で使われているモジュール。mixin書き換えとかにも使えるらしい

debbug

triggerとかattachとかのシーケンスをログに出したり、色々

Page 31: Flight入門

まとめ

Flightいいよ!

疎結合!

再利用性!

Flightの3ステップ

1.コンポーネント作る

2.HTML書く

3.attachToする処理を書く

Page 32: Flight入門

続きはWebで!

https://github.com/sys1yagi/flight_sample

Page 33: Flight入門

質疑応答