これは私の最初のknockout.jsアプリケーションなので、コードを少し簡略化して、達成しようとしていることを説明します。
私は次のようにビューモデルを設定しています:
function Product(data) {
this.productName = data.productName;
this.serialNumber = data.serialNumber;
this.version = ko.observable(data.version);
this.isSelected = ko.observable(data.IsSelected);
}
function RestoreViewModel() {
var self = this;
//Properties
self.allCustomerProducts = ko.observableArray([]);
//Computations
self.selectedProducts = ko.computed(function() {
return ko.utils.arrayFilter(self.allCustomerProducts(), function(product) { return product.isSelected() });
});
}
そして、次のようないくつかのマークアップ設定:
<div id="Version1">
<div class="product1"><a href="">download link goes here.</a></div>
<div class="product2"><a href="">download link goes here.</a></div>
<div class="product3"><a href="">download link goes here.</a></div>
</div>
<div id="Version2">
<div class="product1"><a href="">download link goes here.</a></div>
<div class="product2"><a href="">download link goes here.</a></div>
<div class="product3"><a href="">download link goes here.</a></div>
</div>
これを設定する方法は、ユーザーが選択した製品のリストを持っており、製品ごとにバージョンを選択することです。これは正常に機能しているため、selectedProducts
計算されたメソッドが正しいデータを含む適切な配列を返していると見なすことができます。
何度も試してもわからなかったのは、製品とバージョンの選択に基づいてダウンロードを表示する方法です。
ユーザーがproduct1とバージョン1を選択してから、product1とバージョン2も選択した場合、それらの対応する要素を表示する必要があります。
ビューモデルに何かがある場合、またはHTMLマークアップが異なる場合は、これを修正して修正します。
編集:これは、どのような設定と必要な出力を示すための図です。