Knockout js - beforeRemove动画,同时将项目添加到可观察数组

Cyr*_*iuz 33 javascript knockout.js

我有一个敲除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);
});
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

jan*_*rde -1

您可以使用 beforeAdd 绑定在显示添加的元素时删除该项目

** 编辑 **

这是小提琴: http: //jsfiddle.net/janarde/U6Um5/5/

<button id="button" data-bind="click: addremove">Click</button>
<table id="grid">
    <tbody data-bind='template: { foreach: data, afterAdd: addLine, beforeAdd: removeLine }'>
        <tr>
            <td data-bind="text: test"></td>
            <td>

            </td>
        </tr>
    </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)