Vue.js vs Knockout.js

Vue.js のサンプルを Knockout に移植し何気なく投稿したところ、Vue.js の作者さんからレスを頂き KO Vue お互いのやり方を交換することに。
3

部品化というからには、と少しひねったコードを提示してみましたw

Evan You @youyuxi

@ken_zookie note in my previous example all instances are bound to the same Array and the sliders/add/remove still work.

2014-03-06 03:50:39

「同じ配列でやってるのと、スライダーと追加削除が...」

フォーカスしていた点はそこだったのですね。ということでテンプレで増殖させた版を提示。

Evan You @youyuxi

@ken_zookie very nice! One downside I see is you have to manually observe and update the index and totals.

2014-03-06 04:29:57
Evan You @youyuxi

@ken_zookie also to add a new stat you need to push a new ViewModel instead of a plain object

2014-03-06 04:30:41

まとめと感想

Vue.js は配列の要素数やインデックスをトラッキングする必要がない

Knockout では今回のコードのように、配列の更新を子 ViewModel で監視する必要があった。

Vue.js では、コンポーネント(ViewModelに当たるもの?)が特殊な階層構造を持っており、子コンポーネントから親コンポーネントのプロパティに容易にアクセスできる。そのため親の配列へアクセスする際に特別な書き方は必要ない。

Knockout は基本的に ViewModel をバインドしないと双方向バインディングができない

これは適切に変換すればOKだが、Vue.js は変換する必要がない。Vue.js でもトラッキング対象として追加されたオブジェクトは ViewModel として get/set を適用されるため、厳密にはプレーンオブジェクトではないが JSON シリアライズする際に特に注意することはない。

これについては、Knockout-ES5 でも条件を同じにすることができる。KO-ES5 の ko.track をプレーンオブジェクトに適用することで ViewModel に変換でき、さらに JSON シリアライズする際には変換は不要となる。

Vue.js は ES5 以上にフォーカスしたフレームワーク。
Knockout と Vue.js ではかなり差異があるし Vue.js のほうが cool だが、Knockout-ES5 であれば互角に戦えるのでは、という感想。

けん🐍🦀 @ken_zookie

@youyuxi exactly. I have to convert a new plain object to a ViewModel at anywhere.

2014-03-06 04:40:39