我有一个奇怪的问题,我有一个对象 - 我们称之为 Person - 它具有可观察的属性 FirstName 和 Lastname,以及名为 FullName 的第三个计算属性。在我的 ViewModel 中,我有一个这些 Person 对象的可观察数组。我还有一个函数可以将一个空的 Person 推送到数组中。
奇怪的部分来了。
当我添加一个人,更改名字和姓氏时,计算出的全名变成名字和姓氏的串联 - 这是预期的行为。如果我随后添加另一个人对象,更改该对象的 FirstName 或 LastName 属性,然后返回以更改第一个人的 FirstName,则计算的两个 Person 对象的 FullName 现在是仅最后一个 Person 的名字和姓氏属性的串联。
这是代码:
function Person(data)
{
self = this;
self.FirstName = ko.observable(data !== undefined ? data.FirstName : "");
self.LastName = ko.observable(data !== undefined ? data.LastName : "");
self.FullName = ko.computed(function ()
{
return self.FirstName() + " " + self.LastName();
});
};
function ViewModel() {
var self = this;
self.People = ko.observableArray([]);
self.AddPerson = function()
{
self.People.push(new Person());
}
}
ko.applyBindings(new ViewModel());
...并且可以使用以下步骤在此 Fiddle中重新创建问题:
- 按添加
- 在两个输入中填充随机文本
- 观察按钮下方的串联输入
- 再次按添加
- 在两个新输入中的任何一个中填充随机文本
- 更改第一个输入的值
- 观察连接的输入现在完全相同。
我怎样才能让这个看似简单的场景正常工作?
任何帮助表示赞赏。先感谢您。