【发布时间】:2013-06-06 23:50:50
【问题描述】:
我正在尝试使用自定义绑定显示通知 DIV,同时还通过 2 个可观察对象调整该 DIV 的 CSS 和 HTML。
问题是,当我更改这 2 个可观察对象的值时,它也会出于某种原因触发自定义绑定。
模板:
<div class="alert top-alert" data-bind="fade: topMessageShow, css: topMessageType, html: topMessage"></div>
自定义处理程序:
ko.bindingHandlers.fade = {
update: function resolveFade(element, valueAccessor, allBindingsAccessor) {
if (ko.utils.unwrapObservable( valueAccessor() )) {
$(element).hide().delay(300).fadeIn('slow');
} else {
// fade out the notification and reset it
$(element).fadeOut('slow', function() {
// reset those 2 observables that set class and HTML of the notification DIV
MyClass.topMessageType('');
MyClass.topMessage('');
});
}
}
};
触发代码:
MyClass.topMessageType('alert-info');
MyClass.topMessage(msg);
MyClass.topMessageShow(true);
JSFiddle: http://jsfiddle.net/UrxXF/1/
【问题讨论】:
-
我认为您的问题在于其他与可观察对象的绑定。它们都成为
allBindingsAccessor的一部分,并且更改它们可能需要重新评估您的绑定,因此淘汰赛再次调用它。要解决此问题,您可以在淡入/淡出之前检查元素的可见性和/或动画状态。