Otrzymuję "SCRIPT5002: oczekiwana funkcja", co dzieje się tylko w IE. Obecnie testuję w stosunku do wersji 9. Dzieje się tak, gdy używam wcześniej zdefiniowanych obliczeń obserwowalnych wewnątrz innych obliczalnych obserwowalnych.Obliczenie z Knockout daje oczekiwany błąd funkcji tylko w IE.
Moja aplikacja jest nieco bardziej skomplikowane niż to, więc ja powielana błąd ze znacznie prostszą kodu poniżej. Błąd występuje w linii z = self.subtotal();
po wprowadzeniu numeru dla Numer 1, Numer 2 i Numer 3 (i tabulator).
Ten błąd nie występuje w Chrome lub Firefox i mam google na dłuższą chwilę. Mam nadzieję, że ktoś pomoże mi mnie odtrącić.
Oto link do jsfiddle: http://jsfiddle.net/kCmTg/
Oto 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());
});
Oto 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" />
Dzięki za nieco większą jasność w kwestiach i trochę bardziej zwięzłą poprawkę. Wprowadziłem już rozwiązanie Judy przed zobaczeniem tej opcji i opuściłem ją z innych powodów, które nie mają związku z tą dyskusją. Uważam jednak, że jest to dokładniejsza odpowiedź. – EJDev
Miał podobny problem i był w stanie naprawić go przy użyciu drugiej poprawki, umieszczając '()' na wartości w 'data-bind'. Świetna robota. – vapcguy