Ich versuche, eine Benachrichtigung DIV mit Acustom-Bindung zu zeigen, während auch anpassen, dass DIV CSS und HTML über 2 Observablen.KnockoutJS benutzerdefinierte Bindung feuern mehrere Male
Das Problem ist, dass, wenn ich Wert dieser 2 Observablen ändern, ist es auch die benutzerdefinierte Bindung als auch aus irgendeinem Grund feuert.
Vorlage:
<div class="alert top-alert" data-bind="fade: topMessageShow, css: topMessageType, html: topMessage"></div>
Benutzerdefinierte Handler:
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('');
});
}
}
};
Triggern Code:
MyClass.topMessageType('alert-info');
MyClass.topMessage(msg);
MyClass.topMessageShow(true);
JSFiddle:http://jsfiddle.net/UrxXF/1/
Ich * denke * dein Problem ist mit den anderen Bindungen zu observables. Sie werden alle Teil des 'allBindingsAccessor' und ihre Änderung * kann * eine Neubewertung Ihrer Bindung erfordern, also ruft knockout sie erneut auf. Um das Problem zu beheben, können Sie die Sichtbarkeit und/oder den Animationsstatus des Elements vor dem Ein-/Ausblenden überprüfen. –