flight入門

Post on 07-Jul-2015

2.282 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

自己紹介

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

名前:八木俊広

Twitter: @sys1yagi

最近:

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

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

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

アジェンダ

Flightってなに?

Flightの特徴

デモアプリ

Flightの導入

Flightの使い方

まとめ

対象読者

@vvakame

Flightってなに?

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

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

https://github.com/twitter/flight

Flightの特徴

コンポーネントベースだ

イベントドリブンだ

何がおいしいか

こういう時はつらそう

コンポーネントベースだ

DOM Component

DOM

DOM Component

attach

attach

attach

Module

mixin

HTML界 JS界

コンポーネントベースだ

DOM Component

DOM

DOM Component

attach

attach

attach

Module

mixin

HTML界 JS界

互いに疎

イベントドリブンだ

ComponentDOM1 1

DomとComponentは1:1の関係。

ComponentはDomへの参照を持つ

イベントドリブンだ

ComponentDOM1 1

Button

clickblur

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

イベントの処理を行う

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

イベントドリブンだ

ComponentDOM1 1

ComponentDOM1 1

Button

clickblur

DIV

超えられない壁

結果を他Componentにも渡したい

イベントドリブンだ

ComponentDOM1 1

ComponentDOM1 1

Button

clickblur

DIV

超えられない壁

trigger(“onChangeData”, data);

on(“onChangeData”, function);

イベントドリブンだ

Component

Component

clickblur

trigger(“onChangeData”, data);

on(“onChangeData”, function);

Component

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

trigger(“changedShcedule”, schedule);

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

イベントドリブンだ

Component

Component

clickblur

trigger(“onChangeData”, data);

on(“onChangeData”, function);

Component

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

trigger(“changedShcedule”, schedule);

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

互いに疎

何がおいしいか

DomとComponentが互いに疎

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

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

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

再利用性!

こういう時つらそう

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

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

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

デモアプリ

Node.js+express+jade+mongoose

MongoDB

Flight

jQuery

requirejs

es5-shim

bootstrap

https://github.com/sys1yagi/flight_sample

構造

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

Flight様

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

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

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

Flightの導入

まずBower

component.jsonを書く

bower install

必要なscriptを読み込ませる

Bower?

component.json

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

必要なjsを読み込む

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

Flightの使い方

コンポーネントを作る

attachToでDOMにアタッチ

ね、かんたんでしょ?

trigger

mixin

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

コンポーネントを作る

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

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

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

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

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

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

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

set_name.js

attachToでDOMにアタッチ

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

アタッチ対象のセレクタ

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

ね、簡単でしょ?

trigger

todo_list_controller.js

load_list.js

登録

実行

mixin

module作ってがっちゃんこ

mixin

モジュールを読み込む

Mixin!

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

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

advice, compose, debbug

advice

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

compose

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

debbug

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

まとめ

Flightいいよ!

疎結合!

再利用性!

Flightの3ステップ

1.コンポーネント作る

2.HTML書く

3.attachToする処理を書く

続きはWebで!

https://github.com/sys1yagi/flight_sample

質疑応答

top related