我现在已经看了好几个小时,无法弄清楚缺少了什么。我已经尝试将计算的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
答案 0 :(得分:1)
要让它发挥作用,您需要做的就是将value: numStudents()">
更改为value: numStudents">
。请参阅&#34; optionsValue&#34;第here节,其中解释了(我强调的重点):
与optionsText类似,您还可以传递其他参数 调用optionsValue来指定哪些对象的属性 应该用于在元素上设置value属性 KO生成的。
关键是您要指定希望获得更新值的属性。