5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ember.jsAdvent Calendar 2012

Day 4

Ember.js データとテンプレートのバインディング

Last updated at Posted at 2012-12-03

今日は、Ember.js によるデータとテンプレートのバインディングの方法を説明します。

Ember.jsアプリケーションは、Handlebarsテンプレートエンジンを使って、HTMLへの値の埋め込みを記述します。
他のMVCフレームワークと同様、表示要素の単位をViewと呼びます。
Ember.jsのViewは、Handlebarsテンプレートと、Ember.Viewを継承したクラスのインスタンスから構成されます。Viewクラスは表示に必要な情報をメンバとして持ち、テンプレートは情報の表示方法を記述します。

実際のサンプルを見てみましょう。

var App = Ember.Application.create();
  
App.ApplicationView = Ember.View.extend({
  lhs: 6, 
  rhs: 7,
  answer: function () {
    return this.get('lhs') * this.get('rhs');
  }.property('lhs', 'rhs')
});

ネームスペースとしてEmber.Applicationクラスのインスタンスを作成します。これはお約束です。
次にEmber.Viewを継承したViewクラスを定義します。answerメンバは、昨日説明したバインディング機能の一種、プロパティとして記述しています。
名前をApplicationViewという名前にしておくと、名前をつけてないテンプレートに対して自動的に結びつけ、アプリケーション初期化時にインスタンスを作成して描画してくれるようです。この動作は現状ドキュメントには書いてない気がします。

次に、このViewクラスの情報を表示するHandlebarsテンプレートを見ていきます。

  <script type="text/x-handlebars">
    {{view Ember.TextField valueBinding="lhs"}}

    *

    {{view Ember.TextField valueBinding="rhs"}}

    = 

    {{answer}}
  </script>

{{ }} で囲んでる部分が、バインディングの定義です。一般のテンプレートエンジンと同様、ここにデータを埋め込むわけですが、Ember.jsのテンプレートは、値が更新されたタイミングで自動で表示を更新してくれます。

今回のサンプルだと、lhs, rhsの入力欄からユーザが値を変更すると、自動でApplicationViewのそれぞれのメンバの値が更新されます。さらに、これらのメンバを参照するように定義されているanswerの値も更新され、answerの値を埋め込んでいるテンプレートの表示も更新されます。

これを利用することで、DOMイベントのハンドラ、DOM情報の更新処理を全く書いていないにも関わらず、動的に計算結果表示を更新するアプリケーションを作成できます。

では実際にサンプルの動作を体験してみてください。

データバインディングの強力さを実感していただけたのではないでしょうか。

5
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?