Próbuję pokazać DIV powiadomień za pomocą wiązania niestandardowego, a także dostosowując kod CSS i HTML DIV przez 2 obserwowalne.Własne wiązanie niestandardowe KnockoutJS wiele razy
problemem jest to, że przy zmianie wartości tych 2 obserwabli, ale także pożary wiążącą, jak również z jakiegoś powodu przyzwyczajeń.
Szablon:
<div class="alert top-alert" data-bind="fade: topMessageShow, css: topMessageType, html: topMessage"></div>
klienta 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('');
});
}
}
};
Wyzwalanie Kod:
MyClass.topMessageType('alert-info');
MyClass.topMessage(msg);
MyClass.topMessageShow(true);
JSFiddle:http://jsfiddle.net/UrxXF/1/
Ja * myślę, że masz problem z innymi powiązaniami z obserwowalnymi. Wszystkie stają się częścią 'allBindingsAccessor', a ich zmiana * może * wymagać ponownej oceny twojego powiązania, więc nokaut wywoła to ponownie. Aby rozwiązać problem, możesz sprawdzić widoczność i/lub status animacji elementu przed zaniknięciem/zaniknięciem. –