siehe Arbeits jsFiddle: http://jsfiddle.net/ruslans/vFK82/Kreis Abhängigkeit von Knockout berechnet
Ich habe 3 Felder: Nettopreis (Bsp. Steuern), Steuerbetrag und Gesamtpreis (Preis ohne MwSt + Steuerbetrag.). der NetPrice und der Total sind schreibbar, d. H. Sie können beide ändern und die anderen 2 Werte müssen automatisch berechnet werden.
Die Art, wie ich es getan habe, verwendet 3 beobachtbare und 2 berechnete Knockout-Objekte, aber ich dachte, dass jemand, der Knockout viel besser kennt, einen effizienteren Weg vorschlagen könnte.
html:
Net Price:
<input type="textbox" data-bind="value: NetPriceCalc" />
<br />Tax Amount:
<label data-bind="html: TaxAmt"></label>
<br />Total:
<input type="textbox" data-bind="value: TotalCalc" />
Skript:
var viewModel = {
NetPrice: ko.observable(100),
TaxAmt: ko.observable(20),
Total: ko.observable(120),
TaxRate: 0.2
};
viewModel.updateTaxAmt = function (useNetPrice) {
if (useNetPrice) {
return this.TaxAmt(this.NetPrice() * this.TaxRate);
} else {
var total = Number(this.Total());
var taxAmt = total - total/(1 + this.TaxRate);
return this.TaxAmt(taxAmt);
}
};
viewModel.updateNetPrice = function() {
this.NetPrice(Number(this.Total()) - Number(this.TaxAmt()));
};
viewModel.updateTotal = function() {
this.Total(Number(this.NetPrice()) + Number(this.TaxAmt()));
};
viewModel.NetPriceCalc = ko.computed({
read: function() {
console.log("NetPriceCalc read");
return viewModel.NetPrice();
},
write: function (value) {
console.log("NetPriceCalc write");
viewModel.NetPrice(value);
viewModel.updateTaxAmt(true);
return viewModel.updateTotal();
}
});
viewModel.TotalCalc = ko.computed({
read: function() {
console.log("TotalCalc read");
return viewModel.Total();
},
write: function (value) {
console.log("TotalCalc write");
viewModel.Total(value);
viewModel.updateTaxAmt(false);
return viewModel.updateNetPrice();
}
});
ko.applyBindings(viewModel);
ausgezeichnet! danke – Tsar
Ziemlich cool. Sie können dem Datenbindungsattribut der Felder "valueUpdate: 'afterkeydown'" hinzufügen, sodass sie bei jedem Schlüsselstrich aktualisiert werden. –