覆盖ko.computed值

时间:2018-03-15 17:54:38

标签: jquery knockout.js

我这里有这段代码

  orderTotal = ko.computed(function () {

        return parseFloat($("#PurchaseDomainSuffix option:selected").text().match(/[0-9]+(?:\.[0-9]*)?/g)) || 0;
    }

在页面加载时从字符串中取出数值。 (从下拉列表中加载)但是当列表被更改时,我无法弄清楚如何更新orderTotal值。

我是淘汰赛的新手我正在研究ko.computed的写函数。不确定我是否正在寻找正确的方向。 在更改下拉列表后,如何使用新值覆盖页面加载中的值。

1 个答案:

答案 0 :(得分:2)

Knockout对下拉菜单有很好的支持。

您可以使用options绑定生成列表,使用value选项进行正确选择。这是一个简单的例子。



function ViewModel() {
  var self = this;

  self.list = [{
      name: "Breakfast",
      time: 'Morning'
    },
    {
      name: "Lunch",
      time: 'Noon'
    },
    {
      name: "Dinner",
      time: 'Evening'
    }
  ];

  self.selectedItem = ko.observable();

  self.selectedComputed = ko.computed(function() {
    var selectedItem = self.selectedItem();
    return "I'll eat at " + selectedItem;

  });


}

ko.applyBindings(new ViewModel());

<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>

<select data-bind="options: list, value: selectedItem, optionsText: 'name', optionsValue: 'time'"></select>
<br>
<span data-bind="text: selectedItem"></span>
<br>
<span data-bind="text: selectedComputed"></span>
&#13;
&#13;
&#13;