2012-03-06 5 views
0

したがって、モデルから数値を取得し、その数値(観測可能な配列の長さ)を使用して、「サブモデル」内のオブジェクトの数を動的に制御しようとしています。この場合、親モデルで「メタ見出し」を追加または削除すると、子モデルには自動的に対応する「メタフィールド」の数が自動的に設定されます。ノックアウト:配列内のオブジェクトの数を動的に制御しますか?

だから、これは私が上で物事を基づかだ配列の長さをつかむ:

self.metaCount = ko.computed(function() { 
     return parent.metaHeadings().length; 
}); 

これは私が動的にオブジェクトをプッシュする配列です:

self.metaColumns = ko.observableArray([]); 

そして、どのように私、これはあります配列にアイテムを動的にプッシュしようとしています:

self.columnUpdate = ko.computed(function() { 
     for (i=0; i<self.metaCount(); i++) { 
       self.metaColumns.push({heading: ko.observable()}); 
     } 
}); 

ここで、私はモデルでこれをすべてやっています。その理由は、モデルとサブモデルのいくつかのインスタンスがあり、変更が行われたときに、それぞれが独自の更新を処理するようにするのがより理にかなっているからです。

私はこれについてすべて間違っていますか?

答えて

1

私はそれがあなたの要求に依存すると言います。まず、現在のコードは正しく動作していますか?問題がなければどうしますか?

metaColumns配列は個別に編集可能にする必要がありますか?答えは何も、その後でない場合は、なぜあなたは、単に行うことができます別のプロパティとしてそれらを維持する:

self.metaColumns = ko.computed(function() { 
    var result = []; 
    for (i=0; i<self.metaCount(); i++) { 
     self.metaColumns.push({heading: ko.observable()}); 
    } 
    return result; 
}); 

私はそれがに追加していきますので、columnUpdateが再計算されたときにあなたが現在metaColumns配列をクリアしていないことに気づきますアレイ。

これが役に立ちます。

+0

驚くばかりです。ありがとう! –

関連する問題