Asial Blog

Recruit! Asialで一緒に働きませんか?

jQueryだけ使うのが馬鹿らしくなる。KnockoutJSに触れる

カテゴリ :
フロントエンド(HTML5)
タグ :
Tech
JavaScript
KnockoutJS
久保田です。最近KnockoutJSというJavaScriptフレームワークを勉強しています。

KnouckoutJSはjQueryの上に構築されているフレームワークです。jQueryのみ使うのと比べてKnockoutJSを利用すると、ウェブページ上のインタラクションを圧倒的に簡単に記述できます。この記事では、簡単にKnockoutJSの概要を説明し、KnockoutJSを用いたデモを紹介します。

このフレームワークの特徴としてあるのは、HTML内に宣言的な記述を埋め込むことでインタラクションが実装できることです。HTML5のカスタム属性(data*属性)を用いて、その要素に関する処理を宣言してきます。裏側の処理は、JavaScriptでViewModelを定義し、そこにビューが必要とする値を管理します。

例えば、あるチェックボックスにチェックを入れると下の要素がトグルする簡単な例は、以下のように記述します。data-bind属性の中にViewModelへの束縛のためのパラメータを埋め込み、その裏ではViewModelを適用してインタラクションが実装されます。

  1. <div id="app">
  2.     <p><input type="checkbox" data-bind="checked : show" /> toggle</p>
  3.     <h1 data-bind="visible : show, text : headerText"></h1>
  4. </div>
  5.  
  6. <script type="text/javascript">
  7.  
  8. $(function() {
  9.     var viewModel = {
  10.         show : ko.observable(true),
  11.         headerText : "HelloWorld"
  12.     };
  13.  
  14.     ko.applyBindings(viewModel, $("#app")[0]);
  15. });
  16. </script>

もうひとつの特徴としては、jQueryの公式プラグインの一つであるjQuery Templatesプラグインとの連携が容易になっています。templateバインディングで、以下のようにテンプレートのIDを指定すると簡単にテンプレートとの連携もできます。

  1. <div data-bind="template : 'hello'"></div>
  2.  
  3. <script type="text/x-jquery-tmpl" id="hello">
  4. Hello World
  5. </script>
  6.  
  7. <script type="text/javascript">
  8. $(function() {
  9.     ko.applyBindings({});
  10. });
  11. </script>

とりあえず、これを用いてTODO管理アプリのデモを作ってみました。デザインを整えるためにTwitter Bootstrapを利用しています。宣言的な記述のおかげで、インタラクションのためにコードを長々と書く必要が一切なく、コードが非常にすっきりしています。HTMLやCSSなど含めて160行程度に収められました。


MyTodoApp Demo


ソースコードを見れば、普通のjQueryでDOM操作をしてインタラクションを実装するスタイルとは、全くちがう書き方になっているのがわかると思います。上のTODOアプリのデモでは、DOM操作を直接記述している部分はひとつもありません。

既存の書き方とは違うので慣れないと最初は若干書きづらい感じもするのですが、KnockoutJSのウェブサイトには、普通のドキュメントデモだけではなくJavaScriptを実行しながら進められるインタラクティブなチュートリアルがあり、ドキュメントも充実しています。

というわけで簡単にKnockoutJSの紹介をしました。興味を持った方は触ってみては如何でしょうか。