我有一个knockout js问题,并显示一个可观察数组作为列表;在beforeRemove动画运行时添加项目时,已移除的元素将移动到列表的底部,而不是停留在其位置,直到动画完成并且元素被移除。敲除js - beforeRemove动画,同时向可观察数组添加项
这里是一个的jsfiddle说明问题更好一点:http://jsfiddle.net/bPP5Q/8/
任何人都知道我怎么能解决这个问题?
的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>
这在2.1中正常工作。在2.2中,我们增加了识别项目被移动的功能,而不是删除它并将其添加回来。看起来这是您正在处理的案例造成的问题。我会更深入地研究它。 – 2013-02-12 13:13:43
我降级到2.1,它工作的很好,但有一些其他问题,而不是存在于2.2,所以如果这可以解决任何其他方式,将是伟大的! – Cyriuz 2013-02-19 09:59:30
这方面的更新?我与Knockout 3.0有同样的问题,你可以在这里看到我的例子:http://jsfiddle.net/davertron/3ucVg/1/ – davertron 2014-03-16 17:44:25