ソースコード
前回の記事に、さらにView
を追加してみた。
ソースコードは長く感じるが、簡単なことしかやってない。
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>こんにちは。動物さん</title>
<!-- テンプレート作成 -->
<script type="text/template" id="animal-template">
<div>
こんにちは。<b><%- name %>ちゃん。</b>(<%- species %>)
</div>
</script>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="http://underscorejs.org/underscore-min.js"></script>
<script type="text/javascript" src="http://backbonejs.org/backbone-min.js"></script>
</head>
<body>
<h3>こんにちは。動物さん。</h3>
<div id="myList"></div>
<script type="text/javascript">
(function() {
//----------
// Model作成
//----------
var Animal = Backbone.Model.extend({
//Attribute(属性)
defaults: {
species: "Animal",
name: "None"
},
//コンストラクタ
initialize: function(){
console.log("初期化処理 : " + this.get("species"));
},
//メソッド
call: function(){
console.log("動物 : " + this.get("species"));
console.log("私の名前は" + this.get("name") + "です。");
}
});
//Animalのインスタンス化
var none = new Animal();
//Animal(犬)のインスタンス化
var dog = new Animal({
species: "犬",
name: "ポチ"
});
//Animal(猫)のインスタンス化
var cat = new Animal({
species: "猫",
name: "タマ"
});
//----------
// View作成
//----------
var BaseView = Backbone.View.extend({
tagName: "div",
//id: "myDivId",
className: "myDivClass",
//テンプレート作成
template: _.template($('#animal-template').html()),
render: function(){
this.$el.html(this.template(this.model.toJSON()));
return this;
},
//イベント定義
events: {
"click": "call"
},
//イベント実装
call: function(){
this.model.call();
//alert(this.model.get("name"));
}
});
var dogDiv = new BaseView({model: dog});
var catDiv = new BaseView({model: cat});
$('#myList').append(dogDiv.render().el);
$('#myList').append(catDiv.render().el);
})();
</script>
</body>
</html>
実行結果
ブラウザ上の文字をクリックすると、Model
に実装したメソッドが実行され、コンソールに結果が表示される。