Knockout.js KnockoutJS-在删除之前单击事件触发过快
我有一个视图模型,看起来像这样:Knockout.js KnockoutJS-在删除之前单击事件触发过快,knockout.js,Knockout.js,我有一个视图模型,看起来像这样: self.selectedItems = ko.observableArray(); self.onBeforeUnselectItem = function (elem) { if (elem.nodeType === 1) $(elem).fadeOut(function() { $(elem).remove(); }); }; self.unselectItem = function (i
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>
我的观点是这样的:
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>
当然。您已经在删除元素了。jQuery效果和类似的长时间运行的进程是异步运行的,也就是说,它们不会阻止其他JS继续运行。这就是为什么
fadeOut
有一个回调:在淡出完成后运行东西。如果您的要求是在将项目添加到unSelectedItems
之前必须完成淡入淡出,那么您必须在回调中完成淡入淡出。这就是我的想法。。。所以我必须从淡出的回调中移除?是的。如果有一个更复杂的过程,您可以将其抽象为一个函数,然后从回调中调用该函数,但是对于这样的一个单行程序来说,这可能太过分了\