Vue.js vs Knockout.js
- ken_zookie
- 11576
- 0
- 13
- 2
部品化というからには、と少しひねったコードを提示してみましたw
@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「同じ配列でやってるのと、スライダーと追加削除が...」
フォーカスしていた点はそこだったのですね。ということでテンプレで増殖させた版を提示。
@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@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 であれば互角に戦えるのでは、という感想。
@youyuxi exactly. I have to convert a new plain object to a ViewModel at anywhere.
2014-03-06 04:40:39