Rotten Tomatoes APIからデータをプルするテストプログラムを作成していますが、マッピングプラグインを使用した後、オブジェクトのプロパティをループするための最良のアプローチを知りたいと思います。データは非常に単純で、jqueryajaxを介して取得されています。
データのごく一部を次に示します。
"ratings": {
"critics_rating": "Certified Fresh",
"critics_score": 99,
"audience_rating": "Upright",
"audience_score": 91
}
これはより大きなマッピングの一部であり、ajaxコールバックで次のようなマッピングを実行しています。
self.moviedetail = ko.mapping.fromJS(data);
私が最適化しようとしているのは、次のことです。
<div data-bind-"with: moviedetail">
<ul data-bind="with: ratings">
<li>Critics Rating: <span data-bind="text: critics_rating"></span></li>
<li>Critics Score: <span>data-bind="critics_score"</span></li>
etc
</ul>
</div>
それぞれの評価をチェックせずに、データに依存しない方法でこのように表示するために、各評価をループする方法を決定していません。アンダースコアを使用すると、プロパティをループしてそれらの値を取得できますが、ノックアウトで同じことを実現する方法がわかりません。
私が探している最終結果はこれです:
<ul>
<li>critics_rating: Certified Fresh</li>
<li>critics_score: 99</li>
....
</ul>
注:間違いなく機能する回答の1つとして、このようにデータを前処理できますが、ビューでそれを行う方法があるかどうかを確認しています。
if (data.ratings!=='undefined') {
self.ratings.removeAll();
for(var prop in data.ratings) {
if(data.ratings.hasOwnProperty(prop)) {
self.ratings.push({name: prop, value: data.ratings[prop]});
}
}
}