前人未踏の領域へ Androidアプリ開発編

Androidアプリ開発に関する調査メモ置き場。古い記事にはアプリ以外も含まれます。

Davis.jsの基礎

Davis.jsとは何か

http://davisjs.com/docs
Davis.jsはHTML5 history.pushStateを使ったJavaScriptライブラリである。JSアプリケーションのためにSinatraスタイルでのルーティング制御を可能にする。

ルーティング

Davis.jsの基本はルーティング制御である。リンクのクリック、フォームのサブミット、そしてブラウザの進む、戻るボタン押下などのタイミングに対応するパスにアクションを記述することによって任意のコードを実行することができるようになる。

動詞、パス、コールバック

Davis.jsのルーティングは動詞(Verb),Path,コールバック3つのパーツを含む。

動詞

get,post,put,delete(del)に対応している。

this.get('/people/:name', function (req) {
      req.params['name']  // this will be whatever name matched from the request path
})
パス

アクションを実行したいパスを記述する。

コールバック

該当するメソッド、パスのリンクがクリックされた際に行いたい処理(アクション)を記述する。

before,after

beforeはRouteが実行される前に呼ばれる。return falseするとRouteは実行されないため、前提条件のチェックなどに使われる。
同じくAfterはRouteの後に呼ばれる。Route処理完了後に共通で行いたい処理がある場合(例えばダブルクリックロックのクリア、ログ出力)などに使用するとよい。

this.before(function (req) {
        // 全ルート共通
})

this.before('/home', function (req) {
     // /home の場合のみ
})

State(状態)とTrans(=transition:推移)

State(状態)に記述したパスはHTTPリクエストを実行せず、ブラウザ上のパスを変更しない。Stateに記述したパスはリンクのクリックやFormのsubmitでは呼ばれないのでtransを使って明示的に呼び出す必要がある。

 this.state('/carousel/next', function (req) {
        // show the next item in a carousel
 })

app.trans('/carousel/next')

Requests

リクエストはリンククリック、フォームのサブミット、状態の遷移のタイミングでDavisによって生成される。生成されたリンクはコールバックを実行し、ブラウザのヒストリーに登録される。

Redirects

リクエストは他のパスにリダイレクトすることができる。リダイレクトをすると新しいリクエストが生成され、古いリクエストはブラウザのヒストリー上、新しいリクエストに置き換わる。新しいリクエストは常にGETメソッドになる。リダイレクトはフォームの送信時に便利で、フォームの送信後に参照系画面にリダイレクトすることによってブラウザのヒストリー上から登録系のリクエストがなくなり、ヒストリーの移動が安全になる。

this.post('/people', function (req) {
    // create a person
    req.redirect('/people/bob')
})