答案 0 :(得分:1)
您的viewModel.people
数组只是一个常规JavaScript数组,而不是ko.observableArray
。在viewModel.refresh
方法中,您将使用其他值替换它。用户界面不会知道它已被更新。
相反,请定义您的viewModel.people
属性,如下所示:
people: ko.observableArray(ko.utils.arrayMap(model.people, function (person) {
return new Person(person);
}))
并在您的viewModel.refresh
方法中,将其用作更改值的函数:
viewModel.people(ko.utils.arrayMap(model.people, function (person) {
return new Person(person);
}));
您的方法还有一个问题(至少在您的jsFiddle代码中)。您正在订阅selectedPerson
属性更改并在那里调用viewModel.refresh
。每次更改selectedPerson
时,它都会触发refresh
,这将替换viewModel.people
数组中的所有人,从而再次触发selectedPerson
更改。所以基本上,你有一个无限循环。
更好的选择只是将新人添加到现有列表的末尾,或者在您的情况下,只需更新每个人的数字。顺便说一句。 <{1}}在这种情况下也应该是Person.numbers
。