Cape.JS - Virtual DOMをサポートしたJavaScriptフレームワーク
Reactに注目が集まっているのは特にVirtual DOMによるところが大きいのではないでしょうか。JavaScript側ではとにかく必要な部分全体をレンダリングしてしまって、実際の描画についてはReactに任せられるのがメリットです。 そんなReactと同じくVirtual DOMをサポートしたJavaScript UIフレームワークがCape.JSです。他にもいくつもの機能が備わっています。
Cape.JSの使い方
Cape.JSのサンプルコードです。mというオブジェクトにタグを追加していくのが基本形です。
"use strict";
var TodoList = Cape.createComponentClass({
render: function(m) {
m.ul(function(m) {
this.items.forEach(function(item) {
this.renderItem(m, item);
}.bind(this))
});
this.renderForm(m);
},
renderItem: function(m, item) {
m.li(function(m) {
m.label({ class: { completed: item.done }}, function(m) {
m.input({ type: 'checkbox', checked: item.done,
onclick: function(e) { this.toggle(item) } });
m.space().text(item.title);
})
})
},
renderForm: function(m) {
m.form(function(m) {
m.textField('title', { onkeyup: function(e) { this.refresh() } });
m.button("Add", {
disabled: this.val('title') === '',
onclick: function(e) { this.addItem() }
});
});
},
init: function() {
this.items = [
{ title: 'Foo', done: false },
{ title: 'Bar', done: true }
];
this.refresh();
},
toggle: function(item) {
item.done = !item.done;
this.refresh();
},
addItem: function() {
this.items.push({ title: this.val('title'), done: false });
this.val('title', '');
this.refresh();
}
});
もっと小さなデモとしては次のようになります。data要素を使って、data.nameといった指定で文字を取得できるのが特徴です。
index.html
<h1>Greeting from Cape.JS</h1>
<div id="hello-message" data-name="World"></div>
<script src="./hello_message.js"></script>
<script>
var component = new HelloMesage();
component.mount('hello-message');
</script>
hello_message.js
var HelloMesage = Cape.createComponentClass({
render: function(m) {
m.div('Hello, ' + this.root.data.name + '!')
}
});
上記のコードを実行した結果がこちらです。
他にもフォームを使ったデモがあります。
簡単なTodoリストのデモです。
Cape.JSの特徴としては、SPA(シングルページアプリケーション)をフルスタックにサポート、マークアップビルダー、フォームのデータ操作、データストア、Railsライクなルーターが挙がっています。React、Ruby on Railsから強く影響を受けているようです。
Cape.JSはJavaScript製、MIT Licenseのオープンソース・ソフトウェア(MIT License)です。