Ich habe ein Problem mit Knockout-JS und Anzeigen eines beobachtbaren Array als Liste; Wenn ein Element hinzugefügt wird, während die beforeRemove-Animation ausgeführt wird, wird das entfernte Element an den unteren Rand der Liste verschoben, anstatt an seiner Position zu verbleiben, bis die Animation beendet und das Element entfernt wurde.Knockout js - beforeRemove Animation beim Hinzufügen von Elementen zu beobachtbaren Array
ist hier ein jsfiddle das Problem ein wenig besser zu erklären: http://jsfiddle.net/bPP5Q/8/
Wer weiß, wie ich dieses Problem lösen könnte?
javascript:
jQuery(function ($) {
var ViewModel = function (data) {
var self = this;
self.data = ko.observableArray(data);
self.removeLine = function (elem) {
if (elem.nodeType === 1) $(elem).fadeOut(3000, function() {
$(elem).remove();
});
}
self.addLine = function (elem) {
if (elem.nodeType === 1)
$(elem).hide().fadeIn(3000);
}
self.removeItem = function() {
self.data.remove(function(item) { return item.test && item.test == 2; });
}
self.addItem = function() {
self.data.splice(1, 0, { test: 9 });
}
self.addremove = function() {
self.removeItem();
var id = setInterval(function() {
self.addItem();
clearInterval(id);
},1000);
}
}
var vm = new ViewModel([{ test: 9 }, { test: 2 }, { test: 1 }, { test: 1 }, { test: 1 }, { test: 1 }, { test: 1 }]);
ko.applyBindings(vm);
});
HTML:
<button id="button" data-bind="click: addremove">Click</button>
<table id="grid">
<tbody data-bind='template: { foreach: data, afterAdd: addLine, beforeRemove: removeLine }'>
<tr>
<td data-bind="text: test"></td>
<td>
</td>
</tr>
</tbody>
</table>
Dies funktioniert ordnungsgemäß in 2.1. In 2.2 haben wir die Funktionalität hinzugefügt, um zu erkennen, dass ein Objekt verschoben wurde, anstatt es zu entfernen und wieder hinzuzufügen. Es sieht so aus, als ob dies ein Problem für den Fall verursacht, mit dem Sie arbeiten. Ich werde es ein bisschen genauer betrachten. –
Ich habe auf 2.1 heruntergestuft und es funktioniert super, aber mit ein paar anderen Problemen, die es in 2.2 nicht gab, also wenn das auf andere Weise gelöst werden könnte, wäre das großartig! – Cyriuz
Irgendwelche Updates zu diesem Thema? Ich habe das gleiche Problem mit Knockout 3.0, Sie können mein Beispiel hier sehen: http://jsfiddle.net/davertron/3ucVg/1/ – davertron