Hallo Leute, das Knockout-Validierungsmodul funktioniert in 3.5.0-rc nicht mehr und sagt Folgendes:
knockout-latest.js:84 Uncaught Error: ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node
at a.qc (knockout-latest.js:84)
at Object.ko.applyBindings (knockout.validation.js:1472)
at HTMLDocument.<anonymous> (startup.designtime.ts:50)
Einfache Repro: https://jsfiddle.net/azaslonov/4z62mw1r/
Wenn man bedenkt, dass sie seit 2015 nicht mehr veröffentlicht wurden, ist wahrscheinlich etwas in KO selbst kaputt gegangen.
https://github.com/Knockout-Contrib/Knockout-Validation/releases
Könnt ihr bitte mal nachschauen?
Siehe https://github.com/knockout/knockout/issues/2388 - um zusammenzufassen, vor 3.5 war nicht angegeben, was es bedeutete, einen Nicht-DOM-Knotenwert als zweiten Parameter an ko.applyBindings
; Wenn Sie in 3.5 einen zweiten Parameter übergeben, muss es ein DOM-Knoten sein.
Die Knockout-Validierung überschreibt ko.applyBindings
und übergibt immer einen zweiten Parameter an das ursprüngliche ko.applyBindings
. In Ihrem Beispiel löst Knockout daher einen Fehler aus, da der Wert des Parameters, der an das ursprüngliche ko.applyBindings
wird, undefined
, das kein DOM-Knoten ist.
Wahrscheinlich ist der einfachste Weg, wenn Sie Knockout-Validierung verwenden, immer einen zweiten Parameter explizit mit dem Wert document.body
. Ändern Sie in Ihrem Beispiel ko.applyBindings()
in ko.applyBindings(undefined, document.body)
Danke, ich denke damit kann ich erstmal leben.
Alternativ können Sie die Knockout-Validierung patchen und den Aufruf origApplyBindings(viewModel, rootNode)
in origApplyBindings.apply(this, arguments)
ändern.
Wenn Sie ko.applyBindingsWithValidation
Sie es wahrscheinlich auch aktualisieren.
Hilfreichster Kommentar
Siehe https://github.com/knockout/knockout/issues/2388 - um zusammenzufassen, vor 3.5 war nicht angegeben, was es bedeutete, einen Nicht-DOM-Knotenwert als zweiten Parameter an
ko.applyBindings
; Wenn Sie in 3.5 einen zweiten Parameter übergeben, muss es ein DOM-Knoten sein.Die Knockout-Validierung überschreibt
ko.applyBindings
und übergibt immer einen zweiten Parameter an das ursprünglicheko.applyBindings
. In Ihrem Beispiel löst Knockout daher einen Fehler aus, da der Wert des Parameters, der an das ursprünglicheko.applyBindings
wird,undefined
, das kein DOM-Knoten ist.Wahrscheinlich ist der einfachste Weg, wenn Sie Knockout-Validierung verwenden, immer einen zweiten Parameter explizit mit dem Wert
document.body
. Ändern Sie in Ihrem Beispielko.applyBindings()
inko.applyBindings(undefined, document.body)