Ameba2012
SNSNode.jsJavaScriptSublime Text 2使


JavaScript使jQuery使

chikuwa.js使!?

chikuwa.js


jQuery
RouterView使


chikuwa.js使

DOM


DOMJavaScript


jQuery
// containerというIDを持つdiv要素を選択
$('div#container')
// textというクラスを持つp要素を選択
$('p.text')

DOM


DOMtaggat使
// <div class="container"></div>
$.tag('div.container')

// <div class="container">
//     <p class="text">もけけけ</p>
// </div>

$.tag('div.container')
    .tag('p.text').text('もけけけ').gat();

// また、jQueryと同様にappend/prependメソッドで上記と同様のDOMを生成することができます。
var container = $.tag('div.container');
container.append($.tag('p.text').text('もけけけ'));


onDOM2callbackjQuery使
// containerクラスを持つdiv要素にtouchstartイベントを登録。
$('div.container').on('touchstart', function (event) {
    alert('tapされたよ!');
});
// イベントの削除はoffメソッドを使用します。
$('div.container').off('touchstart');


chikuwa-view.jschikuwa-dispatcher.js使

chikuwa-view.js


chikuwa-view.jsViewView


Javascript

group.jsTOPView1View


JavaScriptView

1 pixel|サイバーエージェント公式クリエイターズブログ-view1 pixel|サイバーエージェント公式クリエイターズブログ-view

Vewview.group.topView

1 pixel|サイバーエージェント公式クリエイターズブログ-view_component1 pixel|サイバーエージェント公式クリエイターズブログ-view_component

View
// ページ単位のViewオブジェクトを定義
$.views({
    'view.group.top': {
        init: function () {
            this.dom = $.tag('div').text('サークルTOP');
        },
        render: function () {
            // モジュールをappend
            $.view('view.group.top.myGroup').show(this.dom);
            $.view('view.group.top.pickup').show(this.dom);
            return this.dom;
        }
    },
    'view.group.edit': {
        init: function () {
            this.dom = $.tag('div').text('サークルの編集');
        },
        render: function () {
            return this.dom;
        }
    }
});
// モジュール単位のViewオブジェクトを定義
$.views({
    'view.group.top.myGroup': {
        init: function () {
            this.dom = $.tag('div').text('マイサークル');
        },
        render: function () {
            return this.dom;
        }
    },
    'view.group.top.pickup': {
        init: function () {
            this.dom = $.tag('div').text('ピックアップ');
        },
        render: function () {
            return this.dom;
        }
    }
});
// bodyにview.group.topをappend
// <body>
//     <div>サークルTOP
//         <div>マイサークル</div>
//         <div>ピックアップ</div>
//     </div>
// </body>
$.view('view.group.top').show($('body'));

chikuwa-dispatcher.js


https://s.amebame.com/#profile/photos/1234(ID)?tab=albumID1234


1 pixel|サイバーエージェント公式クリエイターズブログ-view1 pixel|サイバーエージェント公式クリエイターズブログ-view

"1234""?tab=album""?tab=photo"

chikuwa-dispatcher.jsDispatcher




createHashhashexcutehashRouteractionRouterroutes3params4queryactionvarsparamsqueries
// ハッシュを生成
// controller: profile
// action: photo
// params: {id: '1234'}
// query: {tab: 'album'}
var hash = $.dispatcher.createHash('profile', 'photo', {id: '1234'}, {tab: 'album'});// #profile/photo/1234?tab='album'
// ページ遷移
$.dispatcher.execute(hash);
// 下記のようにRouterが定義されていると、controller名(profile)とaction名(photo)が一致するaction関数が呼び出されます。
// Routerを定義
$.routes('profile', {
    '/photo/:id': {
        name: 'photo',
        action: function (vars) {
            var id = vars.params.id;// 1234:idによってユーザを出し分け
            var tab = vars.queries.tab;// album:どちらのタブを開くかを出し分け
            if (tab === 'photo') {
                // 写真タブを出す処理
            } else if (tab === 'album') {
                // アルバムタブを出す処理
            }
        }
    }
});

JavaScriptRouter1actionactionView

AB


A/BA/B

chikuwa.jsA/B


A/BViewRouter使ABViewAABBforEachViewbodyappend
$.routes('test', {
    '/:pattern': {
        name: 'top',
        action: function(vars) {
            var pattern = vars.params.pattern;// A or B
            var viewArray = [];// 複数のViewオブジェクトを入れる配列を用意
            if (pattern === 'A') {// Aパターンの場合
                // Aパターンに必要なViewオブジェクトを配列にセット
                viewArray = [
                    'view.a.header',
                    'view.a.body',
                    'view.a.footer'
                ];
            } else if (pattern === 'B') {// Bパターンの場合
                // Bパターンに必要なViewオブジェクトを配列にセット
                viewArray = [
                    'view.b.header',
                    'view.b.body',
                    'view.b.footer'
                ];
            }
            viewArray.forEach(function(item) {
                // それぞれのViewオブジェクトをbodyにappend
                $.view(item).show($('body'));
            });
        }
    }
});

RouterViewA/B




chikuwa.jsMITWeb使1