Knockout订阅执行多次

时间:2018-05-03 07:07:37

标签: javascript knockout.js

所以我现在已经敲了很长一段时间,而且我似乎无法弄明白(我不是很擅长javascript)。我们有一个模态,它有以下两个字段:

<input type="text" data-bind="value: UnitCost" maxlength="256" style="width: 75px;" />
<input type="text" data-bind="value: ExtendedUnitCost" maxlength="256" style="width: 75px;" />

具有以下2个订阅字段

InfoModel.ExtendedUnitCost.subscribe(function (val) {
    console.log("1 quantity " + InfoModel.Quantity() + " value "+ val);
    if (typeof val !== 'undefined') {
        var Cost = parseFloat(val.toString().replace(',', '.')) / InfoModel.Quantity();

        InfoModel.UnitCost(Cost.toFixed(2));
    }
});

InfoModel.UnitCost.subscribe(function (val) {
    console.log("2 quantity " + InfoModel.Quantity() + " value " + val);
    if (typeof val !== 'undefined') {
        var unitCostExtended = parseFloat(val.toString().replace(',', '.')) * InfoModel.Quantity();
        InfoModel.ExtendedUnitCost(unitCostExtended.toFixed(2));
    }
});

现在,当我将数量设置为10并将Unitcost设置为10.扩展单位成本与预期一致100.当我现在将数量更改为8.我在日志输出中看到以下内容。

  1. 2数量8值10
  2. 1个数量8个值80.00
  3. 2数量8值10.00
  4. 1个数量8个值100
  5. 2数量8值12.50
  6. 1个数量8个值100.00
  7. 这里,1和2是正确的,3是正确的但4是不正确的5&amp; 6是不正确的。更改数量时,我希望调整扩展(如第一次运行),但在下一次运行中,它会调整扩展数量。

1 个答案:

答案 0 :(得分:0)

为什么这些是正确的:????

数量8值10

数量8值80.00

数量8值10.00

为什么这些不正确:????

数量8值100

8值12.50

数量8值100.00

公式是什么?

<强>更新

首先,如果您不需要更新UnitCost - 请勿这样做! 所以,删除此代码:

InfoModel.ExtendedUnitCost.subscribe(function (val) {
    console.log("quantity " + InfoModel.Quantity() + " value "+ val);
    if (typeof val !== 'undefined') {
        var Cost = parseFloat(val.toString().replace(',', '.')) / InfoModel.Quantity();

        InfoModel.UnitCost(Cost.toFixed(2));
    }
});

看看现在发生了什么?