10. メソッド
● インスタンスメソッド:インスタンスで使える
● スタティックメソッド:クラスで使える
● インスタンス変数、スタティック変数も同じ
var MyModel = Backbone.Model.extend(
{インスタンスメソッド : function () { ... } } ,
{スタティックメソッド : function () { ... } }
);
MyModel.スタティックメソッド
var my_model = new MyModel;
my_model.インスタンスメソッド
11. 初期化
● インスタンス時のnew Model(attr, opt)
● =>クラスの
○ initialize内関数()
var Human = Backbone.Model.extend({
initialize : function () {
console.log('initialize now! ');
}
});
var human = new Human;
// => initialize now !
12. 初期値
default : デフォルト値を入れる
● newの引数内の初期値に無い項目を埋めてくれる
● ※objectを入れる場合、関数にしないと他のinstanceにも影響
●
●
●
● initialize と defaultの違い★
○ initialize : parameter自体を元に処理書ける(動的なデフォルト値)
○ default : default値=>与えたparamで上書き(静的なデフォルト値)
var Human = new Backbone.Model.extend({
defaults : {
"name" : "taro",
"age" : "20"
}
});
var defaultman = new Human;
defaultman.attributes // =>{"name": "taro", "age":20}
var yamada = new Human({"name":"yamada"})
yamada.attributes // => {"name":"yamada", age:20}
var hanako = new Human({"name":"hanako", "age":18})
hanako.attributes // {"name":"hanako", "age":18}
13. 属性
● get/set:取得/格納
● has:確認
● attributes:全体の値の取得
var human = new Backbone.Model;
human.set('name', 'Yamada');
human.set('age', 18);
// ちなみに、human.set({"name":"Yamada", "age":18})とも書ける
human.get('age'); // 18
human.has('age'); // true
human.attributes; // {"age": 18}
14. CRUD:
● 作成更新:save(=>jqueryの$.ajax通信)
○ isNew(※後述)で作成/更新(post/put)分けてる ※Rest詳細は次回
● 読み込み:fetch
● 削除:destroy
var Human = Backbone.Model.extend({
localStorage : new Backbone.LocalStorage("ACollection")
//この書き方間違ってます。本来 collectionで使うべき。あくまで説明用に使ってます。
})
var human = new Human;
human.set({"name":"taro"});
human.save(); // この2行をhuman.save({"name":"taro"})でもいける
var another = new Human({"id": human.id});
another.fetch();
another.attributes; // => name:taro
15. id
● id : データのID
○ isNew()は、このidの有無で判別(id無ければisNew=true)
● cid : モデル作成時にbackboneが発番。
○ 保存してないのでid無いが、Viewに存在する場合扱い易くする為
● idAttribute : サーバーから提示されたIDがどれか示す。
○ デフォルトはid。例えば、mongodbなら_idにする。
var Human = Backbone.Model;
var human = new Human({"name":"taro"});
console.log("id : " + human.id);
console.log("cid : " + human.cid); // c1
console.log("isNew : " + human.isNew() ); // true idが無いから
human.set("id":123)
console.log("isNew : " + human.isNew() ); // false idが有るから
16. validation
model.validate(attr, opt)=値のチェック
戻り値
● 正常:戻り値なし
● 異常:戻り値あり(エラーobj/msg等)
validateするtiming
● save前に必ず
● set時に{validate:true}付けた時に
○ ※Parseはsave内でvalidate無い?
エラー時の動作
● saveしない
○ setでvalidateした時はsetしない
● invalidイベントの引き金を引く
● validationErrorプロパティが着く
複数ある時はerr msg等1つのobjにまとめて最後にreturnしないと全部出ない
var Human = Backbone.Model.extend({
validate : function (attrs, options) {
if (!attrs.age) {
return "you need write age";
}
}
})
var noage = new Human;
noage.set({"name": "yamada"},
{"validate":"true"});
console.log(noage)
// => validateErrorプロパティがある
21. 基本操作
● 追加 : add
● 取得 : get(id or cid) / where({key:value}) / at(index)
● 全部取得:models
● 削除:remove(target)
var People = Backbone.Collection.extend();
var japanese = new People;
japanese.add({"id":1, "name":"taro"});
japanese.add({"id":2, "name":"hanako"});
japanese.get(1); // {"id":1, "name":"taro"}
japanese.where({"name":"taro"}); // {"id":1, "name":"taro"}
japanese.models(); // {"id":1, "name":"taro"}, {"id":2, "name":"hanako"}
var yamada_taro = japanese.at(0);
japanese.remove(yamada_taro);
22. modelとの関係付け
modelに指定
var Person = Backbone.Model;
var People = Backbone.Collection.extend({
model : Person
});
var japanese = new People;
japanese.add(new Person({"name":"yamada"}));
japanese.add([
new Person({"name":"tanaka"}),
new Person({"name":"yoshida"})
]);
japanese.models
26. CRUD
● 追加:create
● 取得:fetch
○ ※ちなみに、syncは次回!Restと一緒に見ます!
var People = Backbone.Collection.extend({
localStorage : new Backbone.LocalStorage("PeopleCollection")
})
var people = new People;
people.create({"name":"taro"});
people.create({"name":"hanako"});
var another = new People;
people.fetch(); // {"name": "taro"},{"name": "hanako"}
console.log(people.models)