jQueryと共存できるKnockout.jsで簡単リスト管理

f:id:hoge:20150303210416p:plain

Knockout.jsを利用すればDomをデータとして扱いやすくなる。Jsonでデータを持ってきて渡すだけで自動で一覧してくれ、self.foods.push()で追加、food.delete()で削除などと言ったことができる。もちろんjQueryなども共存できる。

簡単に行ったら、jQueryだけで同じことを実装しようとしたらDomDomしたコードを書かなきゃいけないのだが、Knockoutを利用すればデータを扱う感じでいけるってこと。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Knockout</title>
    <link href="assets/css/bootstrap.min.css" rel="stylesheet">
    <script type="application/javascript" src="knockout-3.3.0.js"></script>
</head>
<body>
<div class="container">
<h1 class="page-header">食料庫リスト</h1>
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Price</th>
<th>Num</th>
<th>Total</th>
</tr>
</thead>
<tbody data-bind="foreach: foods">
<tr>
<td data-bind="text: name"></td>
<td data-bind="text: price"></td>
<td data-bind="text: num"></td>
<td><input type="button" data-bind="click: $parent.total" value="Total"></td>
</tr>
</tbody>
</table>
</div>
<script type="application/javascript">
        var AppViewModel = function() {
            var self = this;
            self.foods = ko.observableArray([
                { name: 'Meet', price: 100, num: 10 },
                { name: 'Fish', price: 200, num: 20 },
                { name: 'Pan', price: 300, num: 30 }
            ]);
            self.total = function(food) {
                alert(food.price * food.num)
            };
        };
        ko.applyBindings(new AppViewModel());
    </script>
</body>
</html>

ちなみにclick: $parent.totalでクリック時のイベントをself.total()に定義しているんだが、第二引数でイベントに関する情報受け取って、event.target的な感じで実際のDomElement取得できるので、こっからjQueryなどに処理を任せたりできるぜ。

Dockerでコンテナ作成時に環境変数を渡す

環境変数を渡すにはeを使う

docker run -d -e MYENV1="hoge" myimage

複数だとこんな感じ

docker run -d -e MYENV1=hoge -e MYENV1=hoge2 myimage

ダブルクォーテンションなくても動くと思う

Thanks

MySQLで接続時に文字コードを設定する

フレームワークなんかではデータベースに接続するときの文字コードを設定する項目があるが、mysqlコマンドで自分で接続するときには分からず???とかなる。設定方法色々調べてみた。

設定ファイルで指定する方法

/etc/my.cnfに下記の記述を追加する

[client]
default-character-set=utf8

コマンド実行時に指定する

mysqlコマンドの--default-character-setオプションで指定できる

mysql --default-character-set=utf8 -u root -p

様々な文字コードデータベースに接続する端末では設定ファイルより、毎度コマンドのオプションで指定した方がいいと私は思った。