我有一个奇怪的问题,我有一个对象——我们称它为 Person——它具有可观察的属性 FirstName 和 Lastname,以及第三个计算属性 FullName。在我的 ViewModel 中,我有这些 Person 对象的可观察数组。我还有一个将空 Person 推送到数组的函数。
奇怪的部分来了。
当我添加一个人时,更改 FirstName 和 LastName,计算出的 FullName 变成名字和姓氏的串联 - 这是预期的行为。如果我然后添加另一个人对象,更改该对象的 FirstName 或 LastName 属性,然后返回以更改第一人称 FirstName,则两个 Person 对象的计算 FullName 现在只是最后一个 Person 的 first 和 lastname 属性的串联。
代码如下:
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 中重现使用以下步骤:
- 按添加
- 在两个输入中随机填充文本
- 观察按钮下方的串联输入
- 再次按添加
- 在两个新输入中的任意一个中填充随机文本
- 更改第一个输入的值
- 观察串联的输入现在完全相同。
如何让这个看似简单的场景正常工作?
感谢任何帮助。先感谢您。
最佳答案
Self 被注册为全局变量,因为它没有包含它。改变自己=这个;到 var self = this;
这在我的手机上很难修复代码,但它可以工作
var self = this;
如果你不声明 var,它被认为是全局范围的一部分并且是共享的。
关于javascript - Knockout.js 中 observableArray 对象中计算属性的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18624884/