Lassen Sie mich eine Alternative anbieten. Obwohl die Verwendung eines manuellen Abonnements nützlich sein kann, gibt es IMHO elegantere Möglichkeiten, dies in Knockout zu tun. Die grundlegendste ist ein berechnetes beobachtbar:
var MainViewModel = function() {
var self = this;
self.firstName = ko.observable('');
self.validnessCssClass = ko.computed(function() {
return !self.firstName() ? 'fa-exclamation-circle' : 'fa-check-circle';
});
}
ko.applyBindings(new MainViewModel());
.fa { color: red; font-weight: bold; }
.fa-check-circle:before { content: " "; }
.fa-exclamation-circle:before { content: "!!!"; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"></script>
<input type="text" data-bind="value: firstName, valueUpdate: 'afterkeydown'" />
<i class="fa" data-bind="css: validnessCssClass"></i>
Ein zweiter Ansatz verwendet extenders, die das resultierende Code machen viel wie die von knockout-validation aussehen. Heck, verknüpfte Dokumente auch ein Beispiel für eine required
Validierung enthalten, lassen Sie mich das hier posten Anzeige wörtlich:
ko.extenders.required = function(target, overrideMessage) {
//add some sub-observables to our observable
target.hasError = ko.observable();
target.validationMessage = ko.observable();
//define a function to do validation
function validate(newValue) {
target.hasError(newValue ? false : true);
target.validationMessage(newValue ? "" : overrideMessage || "This field is required");
}
//initial validation
validate(target());
//validate whenever the value changes
target.subscribe(validate);
//return the original observable
return target;
};
Vielen Dank @ AldoRomo88. Arbeiten wie erwartet. –
wie Aktivieren/Deaktivieren der Schaltfläche basierend auf dem Elementwert mithilfe von Checkicon benutzerdefinierte Bindung –