【发布时间】:2013-09-08 14:41:56
【问题描述】:
我有一个奇怪的问题,我有一个对象 - 我们称之为 Person - 它具有可观察的属性 FirstName 和 Lastname,以及名为 FullName 的第三个计算属性。在我的 ViewModel 中,我有一个这些 Person 对象的可观察数组。我还有一个函数可以将一个空的 Person 推送到数组中。
奇怪的部分来了。
当我添加一个人时,更改 FirstName 和 LastName,计算出的 FullName 将成为名字和姓氏的串联 - 这是预期的行为。如果我然后添加另一个人对象,更改该对象的 FirstName 或 LastName 属性,然后返回以更改第一个人的 FirstName,则计算的两个 Person 对象的 FullName 现在是仅最后一个人的名字和姓氏属性的串联。
代码如下:
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());
...可以使用以下步骤在this Fiddle 中重现问题:
- 按添加
- 在两个输入中填充随机文本
- 观察按钮下方的串联输入
- 再次按添加
- 在两个新输入中的任意一个中填充随机文本
- 更改第一个输入之一的值
- 观察连接的输入现在完全相同。
我怎样才能让这个看似简单的场景正常工作?
感谢任何帮助。先感谢您。
【问题讨论】: