0

我有一个看起来像这样的视图模型:

self.selectedItems = ko.observableArray();

self.onBeforeUnselectItem = function (elem) {
    if (elem.nodeType === 1)
        $(elem).fadeOut(function() {
            $(elem).remove();
        });
};

self.unselectItem = function (item) {
    self.selectedItems.remove(item);
    self.unSelectedItems.push(item);
};

我的观点是这样的:

<div data-bind="foreach: {data: selectedItems, beforeRemove: onBeforeUnselectItem}">
    <span data-bind="text: Name"></span> - <a href="#" data-bind="">Remove</a>
</div>

unSelectedItems我的问题是该项目在淡出动画完成之前被推入。

有没有办法让调用unselectItem等到动画完成?
我意识到这是因为点击事件绑定到的方式unselectItem

编辑

暂时,我在我的unselectItem函数中放了一个延迟:(
这显然不理想!)

self.unselectItem = function (item) {
        self.selectedItems.remove(item);
        setTimeout(function () {
            self.unSelectedItems.push(item);
        }, 350);
    };
4

1 回答 1

0

当然。您已经在为移除元素而这样做了。jQuery 效果和类似的长时间运行的进程是异步运行的,即它们不会阻止其他 JS 继续运行。这就是为什么fadeOut有一个回调:在淡入淡出完成后运行东西。如果您的要求是淡入淡出必须在项目添加到之前完成unSelectedItems,那么您必须该回调中执行此操作。

于 2013-04-04T14:29:08.740 回答