Knockoutjs удалить несколько, установив флажок

У меня есть список "активов", которые я показываю, используя привязку foreach. У каждого актива есть кнопка удаления, которая вызывает $ parent.removeAsset, и все работает нормально.

Однако я хочу добавить опцию, чтобы выбрать несколько "активов", установив флажок, а затем удалите все "активы", которые были отмечены.

Я все еще изучаю веревки нокаутов, поэтому я очень благодарен за любую помощь.

Вот код, который я использую для отображения "активов

<div data-bind="foreach: assets">
 <!-- AssetList AssetItem Tmpl BEGIN -->
 <div data-tooltip="Select Asset">
 <div data-bind="css: type"> </div>
 
 <!-- ko if: type() === 'Text' -->
 
 <!-- /ko -->
 <!-- ko if: type() === 'Image' -->
 <div>Image</div> 
 <!-- /ko -->
 <!-- ko if: type() === 'Video' -->
 <div>Video</div> 
 <!-- /ko -->
 <div>
 
 </div>
 </div>
 <!-- AssetList AssetItem Tmpl END -->
</div>

И это моя функция удаления:

self.removeAsset = function(asset){
 if (!confirm("Are you sure you want to delete this asset?")) {
 event.stopImmediatePropagation(); 
 return false;
 }
 self.selectedIndex(0);
 $.ajax({
 url: "/Assets/delete/"+asset.id(),
 type: "POST",
 success: function(response) {
 self.assets.remove(asset);
 //notify('good',response);
 }
 });

};
2 ответа

Как предложил @Kenneth, я добавил логическое значение в мои активы, а затем зациклился на наблюдаемом массиве и удалил каждый актив, для которого установлено значение true. Вот код, который я использовал для тех, кто хочет сделать что-то подобное:

Массив:

function Asset() {
 var self = this;
 self.id = ko.observable("");
 self.type = ko.observable("");
 self.selected = ko.observable(false);
};

Флажок удаления:

Функция, вызываемая при нажатии кнопки удаления:

$('#deleteMultipleAssets').click(function(){
 if (confirm('Are you sure you want to delete the selected asset?')) {
 ko.utils.arrayForEach(viewModel.assets(), function(asset) {
 if(asset.selected()){
 viewModel.removeMultipleAsset(asset);
 }
 });
 }
});

Функция removeMultipleAssets:

self.removeMultipleAsset = function(asset){
 self.assets.remove(asset);
};


Вы должны добавить поле в свои активы, которое называется selected а затем привязать это поле к флажку, который вы показываете внутри шаблона foreach.

Когда вы нажимаете на общую кнопку удаления, вы можете перебирать свои активы и удалять все те, у которых их selected -field равны true и удаляют их.

licensed under cc by-sa 3.0 with attribution.