コードにはいくつかの問題があります。
0)の定義が正しくありませんviewModel。する必要があります:
foos: ko.observableArray([])
セミコロンなし;。
1)の定義でオブザーバブルを正しく定義していませんfoo。そのはず:
this.Prop1 = ko.observable()
そのため、角かっこ()がありません。
2)前のポイントを念頭に置いて、これはフィールドに値を適用する方法です。
var f = new foo();
f.Prop1(data.Prop1);
3) JavaScriptは配列の長さをキャッシュしないため、ループで使用する場合は常に.length(lengthプロパティではなく、実際にはゲッターです)、長さはすべての反復で評価されます。次を使用する必要があります。
var l = data.length;
for(var i = 0; i< l; i++) {
4) ko.applyBindingsビューモデルをドキュメントにバインドするために使用されます。getリクエストの最後に使用する理由はわかりませんがget、複数回使用する場合は、必ず例外がスローされます。特に、getDOMを変更していないためです。ko.applyBindingsセクションのどこかで実行する必要があると思います$(document).ready(...)。
5)最後に、これらすべての間違いがあっても、コードはある程度機能するはずです。つまり、関連する部分を見てください。
for(var i = 0; i< data.length; i++) {
// some other code
viewModel.foos.push(f);
}
何fがあっても、viewModelのfoos配列にプッシュされます。その後、長さがfoos0になった場合、それdata.lengthは0であることを意味します(または、質問の意味がわかりません[0])。他に説明はありません。このjsFiddleを参照してください。
6)を使用して実際の配列にアクセスすることを忘れないでくださいviewModel.foos()。したがってviewModel.foos.length、正しくありません。正しい長さはviewModel.foos().lengthです。