Ricevo un "SCRIPT5002: funzione prevista" che si verifica solo in IE. Attualmente sto testando contro la versione 9. Succede quando uso un osservabile calcolato precedentemente definito all'interno di un altro osservabile calcolato.Knockout calcolato dà errore di funzione prevista in IE solo
La mia applicazione è un po 'più complessa di così, quindi ho riprodotto l'errore con il codice molto più semplice di seguito. L'errore si verifica sulla riga z = self.subtotal();
quando si immette un numero in per Numero 1, Numero 2 e Numero 3 (e scheda).
Questo errore non si verifica in Chrome o Firefox e ho cercato su Google per un po 'di tempo. Spero che qualcuno possa aiutarmi a disimpegnarmi.
Ecco il link al jsfiddle: http://jsfiddle.net/kCmTg/
Ecco l'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());
});
Ecco l'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" />
Grazie per un po 'più di chiarezza sui problemi e una soluzione leggermente più succinta. Avevo già implementato la soluzione di Judah prima di vedere questa opzione e l'ho lasciata per altri motivi che sono irrilevanti a questa discussione. Credo che questa sia la risposta più accurata. – EJDev
Aveva un problema simile ed è stato in grado di risolverlo usando la tua seconda correzione, mettendo '()' sul valore in 'data-bind'. Ottimo lavoro a trovarlo. – vapcguy