Reputation: 1807
Is it possible to add event to remove itom from drag and drop lists and from associating observableArray (using sortable) ?
I've tried using same logic as for removing on double click in multi select list, but without success:
HTML:
<div class="list">
<h2>Stored procedures In DB 2</h2>
<ul class="list" data-bind="sortable: { data: storedProceduresInDB2, beforeMove: checkAndCopy }, event: { dblclick: removeFromDb2 }">
<li class="item" data-bind="text: Name"></li>
</ul>
</div>
Code:
var ViewModel = function () {
var self = this;
self.storedProceduresInDB1 = ko.observableArray([
{ Name: 'SP1', Id: 1 },
{ Name: 'SP2', Id: 2 },
{ Name: 'SP3', Id: 3 }
]);
self.storedProceduresInDB2 = ko.observableArray([
{ Name: 'SP3', Id: 3 },
{ Name: 'SP4', Id: 4 },
{ Name: 'SP5', Id: 5 }
]);
self.storedProceduresInDB2Orig = ko.observableArray([
{ Name: 'SP3', Id: 3 },
{ Name: 'SP4', Id: 4 }
]);
self.selectedStoredProcedureInDB1 = ko.observable();
self.selectedStoredProcedureInDB2 = ko.observable();
self.selectStoredProcedureInDB1 = function (sp) {
self.selectedStoredProcedureInDB1(sp);
};
self.selectStoredProcedureInDB2 = function (sp) {
self.selectedStoredProcedureInDB2(sp);
};
self.checkAndCopy = function(event) {
var targetHasItem = ko.utils.arrayFilter(event.targetParent(), function(item) {
return item.Id == event.item.Id;
}).length;
if(!targetHasItem) {
event.targetParent.splice(event.targetIndex, 0, event.item);
}
if(event.targetParent != event.sourceParent) {
event.cancelDrop = true;
}
};
self.removeFromDb2 = function(item, event){
self.storedProceduresInDB2.remove(function(item) {
var nameToRemove = $(event.currentTarget).find("option:selected").text();
var isOrig = ko.utils.arrayFirst(self.storedProceduresInDB2Orig(), function(item){
return item.Name == nameToRemove;
});
return !isOrig && item.Name == nameToRemove;
});
}
};
ko.applyBindings(new ViewModel());
Upvotes: 0
Views: 377
Reputation: 14677
Double-clicking the LI doesn't make it selected, so your jQuery to find nameToRemove
isn't finding the text properly. Instead, use this (and you can do it outside the remove
function since it only needs to be grabbed one:
var nameToRemove = $(event.target).text();
Here's the updated JSFiddle.
Upvotes: 1