计算选定的表值(淘汰赛,Javascript)

时间:2014-03-26 09:15:35

标签: javascript knockout.js

寻找一些建议。

我正在尝试创建一个带有淘汰赛的动态表格(它很棒,但我只是在它的第一步)。 这个表有效,但我仍然遇到一些问题: 1.(更新:已删除) 2. self.ave返回NaN,而不是所选风险的计算平均权重;

self.ave = ko.computed(function () {
    var total = 0;
    for (var i = 0; i < self.risks().length; i++) {
        total += self.risks()[i].weight;
    }
    return total/self.risks().length;
});

更新:似乎每次我添加新风险时,它的权重为0.所有风险的总和计算为1(违约风险权重)+ 0(任何新风险的权重)+ 0 + N ...

update2:仍在寻找任何帮助 http://jsfiddle.net/Skaidrius/52xdL/

1 个答案:

答案 0 :(得分:1)

有一些小错误。

  1. 对于第一个问题 - availableRisks不应该是常见的,它应该附加Activity。

    var Activity = function (title) {
     var self = this;
     self.title = ko.observable(title);
     self.availableRisks = ko.observableArray([{
       name: "Low",
       weight: 1
     }, {
      name: "Medium",
      weight: 2
     }, {
      name: "High",
      weight: 3
     }]);
    };
    
  2. 2- self.risks()[i] .weight是可观察的,因此可以用括号访问它。

    self.ave = ko.computed(function () {
        var total = 0;
    
        for (var i = 0; i < self.risks().length; i++) {
            total += self.risks()[i].weight();
        }
       return total/self.risks().length || 0;
    });
    

    为availableRisks更改视图中的绑定

    <!-- ko foreach:risks -->
            <td>
                <select class="form-control input-sm" data-bind="options: $parent.availableRisks, value: risks.weight, optionsText: 'name'"></select>
            </td>
            <!-- /ko -->
    

    Fiddle Demo