Ich bekomme ein "SCRIPT5002: Funktion erwartet", die nur in IE passiert. Ich teste gerade gegen Version 9. Es passiert, wenn ich ein zuvor definiertes berechnetes Observable innerhalb eines anderen berechneten Observablen verwende.Knockout berechnet gibt Funktion erwartet Fehler in IE nur
Meine Anwendung ist ein bisschen komplexer als das, also habe ich den Fehler mit dem viel einfacheren Code unten reproduziert. Der Fehler tritt in der Zeile z = self.subtotal();
auf, wenn Sie eine Nummer für Nummer 1, Nummer 2 und Nummer 3 (und Tabulator) eingeben.
Dieser Fehler tritt nicht in Chrome oder Firefox auf und ich habe seit einiger Zeit gegoogelt. Hoffentlich kann mir jemand helfen, mich zu entsichern. Hier
ist der Link zum jsfiddle: http://jsfiddle.net/kCmTg/
Hier wird das javascript:
function putVars() {
self = this;
self.number1 = ko.observable();
self.number2 = ko.observable();
self.subtotal = ko.computed(function() {
return parseFloat(self.number1()) + parseFloat(self.number2());
}, self, { deferEvaluation: true });
self.number3 = ko.observable();
self.number4 = ko.observable();
self.total = ko.computed(function() {
var x, y, z;
x = self.number3();
y = self.number4();
z = self.subtotal();
return parseFloat(x) + parseFloat(y) + parseFloat(z);
}, self, { deferEvaluation: true });
}
$(function() {
ko.applyBindings(new putVars());
});
Hier ist der HTML:
<h4>Calc 1</h4>
<label for="Number1">Number 1: </label><input id="Number1" type="text" data-bind="value: number1" />
<label for="Number2">Number 2: </label><input id="Number2" type="text" data-bind="value: number2" />
<label for="Subtotal"><b>Subtotal: </b></label><input id="Subtotal" type="text" data-bind="value: subtotal" readonly="readonly" />
<hr />
<h4>Calc 2</h4>
<label for="Number3">Number 3: </label><input id="Number3" type="text" data-bind="value: number3" />
<label for="Number4">Number 4: </label><input id="Number4" type="text" data-bind="value: number4" />
<label for="Total"><b>Total:</b> </label><input id="Total" type="text" readonly="readonly" data-bind="value: total" />
Danke für ein bisschen mehr Klarheit über die Probleme und ein wenig mehr knapp. Ich hatte bereits Judahs Lösung implementiert, bevor ich diese Option sah, und sie aus anderen Gründen verlassen, die für diese Diskussion irrelevant sind. Ich glaube jedoch, dass dies die genauere Antwort ist. – EJDev
Hatte ein ähnliches Problem und konnte es beheben, indem Sie Ihren 2ten Fix verwendeten, indem Sie das '()' auf den Wert in der 'Datenbindung' setzten. Gute Arbeit, das zu finden. – vapcguy