计算选定的表值(淘汰赛,Javascript)
Posted
技术标签:
【中文标题】计算选定的表值(淘汰赛,Javascript)【英文标题】:Calculate selected table values (knockout, 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/
【问题讨论】:
仍然不知道如何计算某些活动的选定风险的总权重和平均权重。 【参考方案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。两者都可以工作以上是关于计算选定的表值(淘汰赛,Javascript)的主要内容,如果未能解决你的问题,请参考以下文章