Knockout.jsで予測身長フォームを作ってみた

本家?ブログ「将来どれくらいの身長になるのか?両親の背丈から予測身長を計算する」で、Knockout.jsで予測身長フォームを作ってみました。

Knockout.jsを最近、仕事でも使っているのです。

MVVMでは、AngularJSをしばらく勉強していました。しかし、AngularJSはver1.3からIE8がサポート外。ver2から記法が全然別ものになるってのを知って、「まだAngularJSは、良いや…」って気持ちになって、Knockout.jsに変更したのです。

Knockout.jsいいですねー。マイクロソフト製だから、IEもサポートだし。jQueryとも共存できすし、実践でも導入しやすいです。

 

ということで、予測身長フォームのコードです。

 

[HTML]

<table class="basic">
<tbody>
<tr>
<th>性別:</th>
<td><input name="sex" type="radio" value="male" data-bind="checked: sex" />男<br /> <input name="sex" type="radio" value="female" data-bind="checked: sex" />女</td>
</tr>
<tr>
<th>父親の身長:</th>
<td><input name="heightOfFather" type="text" data-bind="value: heightOfFather" />cm</td>
</tr>
<tr>
<th>母親の身長:</th>
<td><input name="heightOfMother" type="text" data-bind="value: heightOfMother" />cm</td>
</tr>
<tr>
<th>予測身長:</th>
<td data-bind="text: heightOfChild"> </td>
</tr>
</tbody>
</table>

<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.3.0/knockout-min.js"></script>
<script src='http://www.kigurumi.asia/wp-content/themes/kigurumi-ver2/js/height-feature.js'></script>

 

[JavaScript]

var AppViewModel = function() {
    var self = this;
    self.sex = ko.observable('male');
    self.heightOfFather = ko.observable();
    self.heightOfMother = ko.observable();
    self.heightOfChild = ko.computed(function(data) {
        if( Number(self.heightOfFather()) > 0 && Number(self.heightOfMother()) > 0){
            //男性
            if( self.sex() == 'male'){
                return (( Number(self.heightOfFather()) + Number(self.heightOfMother()) + 13)/2)+2;

            //女性
            }else if( self.sex() == 'female'){
                return (( Number(self.heightOfFather()) + Number(self.heightOfMother()) - 13)/2)+2;
            }
        }
    });

};
ko.applyBindings(new AppViewModel());

 

テンプレートとロジックが分離されるって良いですね。

ということで、Knockout.jsもゴリゴリ使って行こうと思います。

この記事を書いた人:

ナカシマ

北区赤羽在住のWEBデザイナー兼エンジニア。インターネット、WordPress、本・漫画、音楽が大好き。妻と猫と暮らすアップル信者。

BLOG: 着ぐるみ追い剥ぎペンギン