Это мое первое приложение 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
возвращает правильный массив с правильными данными.
Что я не смог понять после многих попыток, так это то, как я могу отображать загрузки на основе выбора продукта и версии?
Если пользователь выбирает продукт1 и версию 1, а затем также выбирает продукт1 и версию 2, мне нужно, чтобы эти соответствующие элементы отображались.
Если что-то в моей модели представления или моя разметка HTML должна отличаться, я готов переработать это, чтобы сделать его правильным.
Изменить. Вот иллюстрация, показывающая настройки и желаемый результат: