[[JSライブラリ]] > Backbone.js
* Backbone.js [#y37ef538]
#setlinebreak(on)

#contents
-- サンプル
--- http://www.magata.net/test/backbonejs/

 http://www.cyokodog.net/blog/backbone-js/
 http://www.slideshare.net/mobile/makingx/backbonejsangularjs
 http://qiita.com/opengl-8080/items/36e9b380c64ba7766511
 https://appkitbox.com/knowledge/javascript/20130604-52


** Backbone.js とは [#td4d4175]
#html(<div style="padding-left:20px;">)
#html(</div>)

** backboneの構成要素 [#ua1d7bdb]
#html(<div style="padding-left:20px;">)

*** Model [#w7c84a06]
#html(<div style="padding-left:20px;">)
#html(</div>)

*** Collection [#kda152d8]
#html(<div style="padding-left:20px;">)
#html(</div>)

*** View [#db7972f1]
#html(<div style="padding-left:20px;">)
#html(</div>)

#html(</div>)

** Model [#pef2def3]
#html(<div style="padding-left:20px;">)

*** 使用例 [#wc27714d]
#html(<div style="padding-left:20px;">)

#mycode(){{
var Book = Backbone.Model.extend({
    // 初期値
    defaults: {
        id    : null
       ,isbn  : null
       ,title : 'default'
       ,price : 1000
    },

    // save時に呼び出すURL
    urlRoot: "/backbonejs/book/" ,

    // 入力チェック
    validate : function(attrs){
        var errMsg = "";
        if (_.isEmpty(attrs.title)) {
            errMsg = "タイトルを入力して下さい";
        }
        return errMsg;
    }
});

// モデルのインスタンス生成
var book = new Book({id : 1, isbn : "test1", title : "テスト1"});

// エラー時の処理を指定
book.on("invalid", function(model, error) {
   alert(error);
});

// インスタンスの中身を表示
console.log(book.toJSON());

// タイトルを変更
var ret = book.set({ title : "テスト2" }, {validate : true});
if (!ret) {
    console.log("入力チェックエラー");
}
console.log(book.toJSON());

// タイトルを空に変更
ret = book.set({ title : "" }, {validate : true});
if (!ret) {
    console.log("入力チェックエラー");
}
console.log(book.toJSON());
}}
#html(</div>)

*** モデルのメソッド [#ha58418d]
#html(<div style="padding-left:20px;">)
|メソッド名|説明|使用例|h
|get|属性等を取得する|book.get("title")|
|fetch|ローカルストレージに保存されたモデルをインスタンスに展開する|book.fetch()|
|destroy|モデルを削除する|book.destroy()|
|clear|モデルの属性等をクリアする|book.clear()|
|toJSON|JSONに変換する|book.toJSON()|
|set|属性等をセットする|book.set({title : "タイトル1"})|
|unset|属性等を未セット状態にする|book.unset("price")|
|on|イベントを登録する|book.on("invalid", function(model,error){ alert(error); })|
|once|1度きりのイベントを登録する||
|off|イベントを登録を解除する||
|isNew|||
|isValid|||
|save|モデルを登録する(localStorageへの登録やWebAPIの呼出を行う)|book.save();|
#html(</div>)

*** モデルのトリガー [#qf90e4ca]
#html(<div style="padding-left:20px;">)
onメソッドで以下のトリガーをハンドリングする事で、値の変更時などにイベントを処理を行う事が可能
|トリガー名|説明|h
|change|値の変更時に起動されるトリガー|
|destroy|オブジェクト削除時に起動されるトリガー|
|invalid|入力チェックでエラー時に起動されるトリガー|
#html(</div>)

*** save、destroy、fetch 時の挙動 [#z6006136]
#html(<div style="padding-left:20px;">)
|ケース|挙動|送信されるHTTPリクエスト|h
|id が未設定のモデルを save|登録が行われる|POST /xxxx/ |
|id が設定済のモデルを save|更新が行われる|PUT /xxxx/123 |
|id が設定済のモデルを destroy|削除が行われる|DELETE /xxxx/123 |
|id が設定済のモデルを fetch|検索が行われる|GET /xxxx/123 |
※ リクエストURLの /xxxx は urlRoot で指定したURL
※ リクエストURLの 123 は id
#html(</div>)

#html(</div>)


**Collection [#q7d28f0a]
#html(<div style="padding-left:20px;">)

*** 使用例 [#ydd69f04]
#html(<div style="padding-left:20px;">)
#mycode(){{
var Tasks = Backbone.Collection.extend({
     model: Task
    ,localStorage: new Store("book-app")
});
}}
#html(</div>)

*** WebAPIの呼び出し [#q456f499]
#html(<div style="padding-left:20px;">)
#html(</div>)

*** localStorageへの保存 [#f1e62807]
#html(<div style="padding-left:20px;">)
#html(</div>)

#html(</div>)


** View [#w19750e9]
#html(<div style="padding-left:20px;">)

*** Viewの定義 [#kbe650a8]
#html(<div style="padding-left:20px;">)
#html(</div>)

*** イベントの定義 [#m83531d7]
#html(<div style="padding-left:20px;">)
#html(</div>)

#html(</div>)

** 実装サンプル [#rb16824d]
#html(<div style="padding-left:20px;">)

*** コンストラクタを定義する [#d36cd233]
#html(<div style="padding-left:20px;">)
#html(</div>)

*** イベントの監視 [#y5d93df1]
#html(<div style="padding-left:20px;">)
#html(</div>)

*** モデルの内容をDOMに反映する [#cb7c1ed4]
#html(<div style="padding-left:20px;">)
#html(</div>)

*** DOMの変更内容をモデルに反映する [#x5bc20ff]
#html(<div style="padding-left:20px;">)
#html(</div>)

*** saveメソッド呼び出し時の挙動を指定する [#wbbcf120]
#html(<div style="padding-left:20px;">)
#html(</div>)

#html(</div>)

#todo

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS