【问题标题】:Calculate selected table values (knockout, Javascript)计算选定的表值(淘汰赛,Javascript)
【发布时间】:2014-05-04 13:47:07
【问题描述】:

寻求一些建议。

我正在尝试创建一个带有淘汰赛的动态表(这很棒,但我只是第一步)。 该表有效,但我仍然遇到一些问题: 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/

【问题讨论】:

  • 仍然不知道如何计算某些活动的选定风险的总权重和平均权重。

标签: javascript knockout.js


【解决方案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- 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;
});

更改可用风险视图中的绑定

<!-- 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

【讨论】:

  • 非常感谢。 self.ave 仍然不计算平均重量,但它现在比以前好得多。另外,您是否介意解释一下为什么有必要将 availableRisks 添加到 Activity 而不是 Risk 类。
  • 因为每行的availablerisk是不同的,所以如果将其共享,那么您将获得相同的值。还有另一种方法,您可以在 Activity 中使用 self.risks 而不是 availableRisk。两者都可以工作
猜你喜欢
  • 1970-01-01
  • 2017-10-16
  • 1970-01-01
  • 1970-01-01
  • 2016-02-03
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多