KnockoutJS - 在beforeRemove之后点击事件太快

时间:2013-04-04 10:23:51

标签: knockout.js

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

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>

我的问题是,在fadeOut动画播放完成之前,该项目已被推送到unSelectedItems

有没有办法调用unselectItem等到动画结束?
我意识到这是因为click事件绑定到unselectItem

的方式

修改

暂时,我延迟了我的unselectItem功能:
(这显然不太理想!)

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

1 个答案:

答案 0 :(得分:0)

不确定。您已经在删除元素了。 jQuery效果和类似的长时间运行进程异步运行,即它们不会阻止其他JS继续运行。这就是为什么fadeOut有回调的原因:在淡入淡出完成后运行一些东西。如果您的要求是在将项目添加到unSelectedItems之前必须完成淡入淡出,那么您必须在内部进行回调