我有一个看起来像这样的视图模型:
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);
};
答案 0 :(得分:0)
不确定。您已经在删除元素了。 jQuery效果和类似的长时间运行进程异步运行,即它们不会阻止其他JS继续运行。这就是为什么fadeOut
有回调的原因:在淡入淡出完成后运行一些东西。如果您的要求是在将项目添加到unSelectedItems
之前必须完成淡入淡出,那么您必须在内部进行回调