我有一个下拉菜单,允许一个人选择定价选项,其中一个是“折扣”。如果选择“折扣”,我需要成本字段成为负值。这很容易实现。
我的问题是:在键入正值后,如何通过检测定价选项下拉是否为“折扣”,如何使成本字段为负数。下面是我的模型的简化版本以及我在逻辑上将数字转换为负数(如果下拉列表更改)。
var row = function (pricing, c) {
var self = this;
self.cost = ko.observable(c ? c : "0").extend({ required: true });
self.pricingOptions = ko.observableArray([
{ id: "1", value: "Freight" },
{ id: "2", value: "Discount" }
]);
self.selectedPricing = ko.observable(pricing ? pricing : "");
self.selectedPricing.subscribe(function (value) {
if (value == "Discount")
{
if (parseFloat(self.cost()) > 0) {
self.cost(-parseFloat(self.cost()));
}
} else {
if (parseFloat(self.cost()) < 0) {
self.cost(-parseFloat(self.cost()));
}
}
});
}
编辑:这是我所拥有的jsfiddle:http://jsfiddle.net/tt1mtb19/3/
请注意,如果已经选择了折扣,当您在字段中输入金额时,无论如何都会保持正数。如果您将下拉菜单更改回运费,然后更改为折扣,则只会更改为负数。
答案 0 :(得分:1)
您需要做的只是正确乘以最高负整数,即-1
,最重要的是使用blur
事件。
<强>视图模型:强>
var ViewModel = function (pricing, c) {
var self = this;
self.cost = ko.observable(c ? c : 0);
self.selectedPricing = ko.observable(pricing ? pricing : "");
self.pricingOptions = ko.observableArray([{
id: "1",
value: "Freight"
}, {
id: "2",
value: "Discount"
}]);
self.selectedPricing.subscribe(function (value) {
switch (value) {
case "1":
self.cost(parseFloat(self.cost()));
break;
case "2":
self.cost(-1 * parseFloat(self.cost()));
break;
default:
break;
}
});
self.modify = function () {
if (self.selectedPricing() == 2 && self.cost() > 0) {
self.cost(-1 * parseFloat(self.cost()));
}
}
}
ko.applyBindings(new ViewModel(0, 2));
示例工作小提琴 here