Backbone.js をちょっとだけ勉強中。

Backbone.js は MVC 構造を導入しやすい JavaScript フレームワーク。

Backbone.js を使うには、jQueryUnderscore.js も必要。

入力したテキストをリアルタイムで加工して表示する仕組みのベースになるサンプルコードを書いてみた (パソコン向けサンプル)。

サンプルのプログラムは、 Model が1つ、View が2つのシンプルな構成。InputView の状態が変わったら、それに合わせて Model (MessageCard) ともうひとつの View である CardView の状態が変わる仕組み。

InputView (View) -> MessageCard (Model) -> CardView (View) な流れ。


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Backbone.js : Message Card Sample</title>
</head>
<body>
 
<div id='my-input-view'></div>
<div id='my-card-view'></div>
 
<script src="http://www.nilab.info/lib/js/jquery/2.1.1/jquery-2.1.1.min.js"></script>
<script src="http://www.nilab.info/lib/js/underscore/1.7.0/underscore-min.js"></script>
<script src="http://www.nilab.info/lib/js/backbone/1.1.2/backbone-min.js"></script>
 
<script type="text/html" id="input-view-template">
<div id="input-view" style="border: double 3px #00ff00;">
  <div>Input Your Message</div>
  <div><input id="input-title" type="text" value="<%= title %>"></input></div>
  <div><input id="input-message" type="text" value="<%= message %>"></input></div>
</div>
</script>
 
<script type="text/html" id="card-view-template">
<div id="card-view" style="border: double 3px #0000ff;">
  <div>Message Card</div>
  <div id="card-title">title: <%= title %></div>
  <div id="card-message">message: <%= message %></div>
</div>
</script>
 
<script>
var InputView = Backbone.View.extend({
 
  events: {
    'keyup #input-title': 'onEditTitle',
    'keyup #input-message': 'onEditMessage'
  },
 
  initialize: function(){
    console.log('InputView#initialize');
  },
 
  template: $('#input-view-template').html(),
 
  render: function(){
    console.log('InputView#render');
    var compiledTemplate = _.template(this.template);
    var data = this.model.toJSON();
    var html = compiledTemplate(data);
    this.$el.html(html);
    return this;
  },
 
  onEditTitle: function(){
    console.log('InputView#onEditTitle');
    this.model.set('title', $('#input-title').val());
  },
 
  onEditMessage: function(){
    console.log('InputView#onEditMessage');
    this.model.set('message', $('#input-message').val());
  },
});
 
var CardView = Backbone.View.extend({
 
  initialize: function(){
    console.log('CardView#initialize');
    this.model.bind('change', _.bind(this.render, this));
  },
 
  template: $('#card-view-template').html(),
 
  render: function(){
    console.log('CardView#render');
    var compiledTemplate = _.template(this.template);
    var data = this.model.toJSON();
    var html = compiledTemplate(data);
    this.$el.html(html);
    return this;
  },
});
 
var MessageCard = Backbone.Model.extend({
 
  initialize: function(){
    console.log("MessageCard#initialize");
    this.on('change', function(){
      console.log("MessageCard#change");
    });
    this.on('change:title', function(){
      console.log("MessageCard#change:title");
    });
    this.on('change:message', function(){
      console.log("MessageCard#change:message");
    });
  },
 
  defaults: {
    "title": "input your title",
    "message": "input your message",
  }
});
 
$(function(){
 
  var myMessageCard = new MessageCard();
  myMessageCard.set('title', 'hello, world');
 
  var myInputView = new InputView({
    model: myMessageCard
  });
 
  var myCardView = new CardView({
    model: myMessageCard
  });
 
  myInputView.render();
  myCardView.render();
 
  $('#my-input-view').html(myInputView.el);
  $('#my-card-view').html(myCardView.el);
});
 
</script>
</body>
</html>

サンプルはこちら → Backbone.js : Message Card Sample

参考書籍として Backbone.js アプリケーション開発ガイド を読んでいる。この本はわかりやすくて参考になる。

そういえば、以前にもサンプルを書いてた → [ヅ] Backbone.js でシンプルなサンプルを書いてみた (2014-05-07) ← Web の情報を少し見ただけであんまりよくわからず書いていた。

tags: backbone.js javascript

Posted by NI-Lab. (@nilab)