计算的Observable不会更新选择更改

时间:2014-08-20 15:38:53

标签: knockout.js

我现在已经看了好几个小时,无法弄清楚缺少了什么。我已经尝试将计算的observable重组为pureComputed,但它没有帮助。我已经考虑过添加" .extend({notify:' always'});"每个KnockoutJS Forcing A Computed Observable to Re-Compute到最后,但没有帮助。我让numStudents成为一个可观察的,但这也没有帮助。不确定我错过了什么组合。还使availableClassSize也具有可观察量。我像这样设置了Num Students下拉列表

<select data-bind="
    options: $root.availableClassSize,
    optionsText: 'name',
    optionsValue: 'value',
    value: numStudents()">
</select>

,计算出的函数是

// computed functions
self.totalClassSize = ko.computed(function() {
    var total = 0;
    ko.utils.arrayForEach(self.assistants(), function (asst) { total += asst.numStudents(); });
    return total;
});

由于它不是可写/可更新的,我认为它不需要valueHasMutated()选项。我没有想法,并且会认为当你更改Num Students下拉列表的值时,计算器会在幕后使用observable进行更新。当我添加一个助手时,它会更新总数,但会更新一行。 TIA,Steve

jsFiddle

1 个答案:

答案 0 :(得分:1)

要让它发挥作用,您需要做的就是将value: numStudents()">更改为value: numStudents">。请参阅&#34; optionsValue&#34;第here节,其中解释了(我强调的重点):

  

与optionsText类似,您还可以传递其他参数   调用optionsValue来指定哪些对象的属性   应该用于在元素上设置value属性   KO生成的。

关键是您要指定希望获得更新值的属性

这是updated Fiddle