감사 나는 그것이해야한다고 생각은 다음과 같습니다
function Product(id, name) {
this.id = id;
this.name = name;
this.categories = [];
}
function ProductCategory(name) {
this.name = name;
}
function ViewModel() {
this.products = ko.observableArray();
this.filters = ko.observableArray();
var self = this;
//dummy data
self.init = function() {
var c1 = new ProductCategory('Cat1');
var c2 = new ProductCategory('Cat2');
var c3 = new ProductCategory('Cat3');
var c4 = new ProductCategory('Cat4');
var p1 = new Product(1, 'Prod 1');
p1.categories = [c1, c2];
var p2 = new Product(2, 'Prod 2');
p2.categories = [c1, c3, c4];
var p3 = new Product(3, 'Prod 3');
p3.categories = [c3, c4];
var p4 = new Product(4, 'Prod 4');
p4.categories = [c1, c2, c4];
self.products([p1, p2, p3, p4]);
self.filters([c1, c3, c4]);
};
self.init();
//filtered products will be recalculated on products or filters array change
self.filteredProducts = ko.computed(function() {
var filteredProducts = [];
ko.utils.arrayForEach(self.products(), function (product) {
var notInFilter = false;
for (var i = 0; i < product.categories.length; i++) {
var category = product.categories[i];
if (self.filters().indexOf(category) < 0) {
notInFilter = true;
break;
}
}
if (!notInFilter) {
filteredProducts.push(product);
}
});
return filteredProducts;
});
}
Fiddle 코드
로