コードにはいくつかの問題があります。
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
、複数回使用する場合は、必ず例外がスローされます。特に、get
DOMを変更していないためです。ko.applyBindings
セクションのどこかで実行する必要があると思います$(document).ready(...)
。
5)最後に、これらすべての間違いがあっても、コードはある程度機能するはずです。つまり、関連する部分を見てください。
for(var i = 0; i< data.length; i++) {
// some other code
viewModel.foos.push(f);
}
何f
があっても、viewModelのfoos
配列にプッシュされます。その後、長さがfoos
0になった場合、それdata.length
は0であることを意味します(または、質問の意味がわかりません[0]
)。他に説明はありません。このjsFiddleを参照してください。
6)を使用して実際の配列にアクセスすることを忘れないでくださいviewModel.foos()
。したがってviewModel.foos.length
、正しくありません。正しい長さはviewModel.foos().length
です。