从可观察数组中刷新选定项

时间:2013-11-21 11:48:06

标签: knockout.js

删除

我问this question again,但是以更好的方式,得到了我需要的答案。

View new question

1 个答案:

答案 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