0
我遇到了由具有可观察属性的对象组成的Knockout ObservableArray问题。我的视图模型相当复杂,但我已经创建了下面的简单测试来说明问题。knockout可观察数组observablearray
我的问题是,当我更改ObservableArray中的某个对象中的某个observable属性的值时,该值将更改为ALL ALL中的对象。
我有一个部门viewModel有一个可观察的该部门的员工数组。然后,我创建了5个对象personVM的实例,这些实例被推送到员工ObservableArray上。 personVM的每个实例都获得唯一的firstName。
以下是加载它们的模型和代码。
var theDepartmentVM = {
employees: ko.observableArray(),
departmentName: ko.observable()
};
var personVM= {
firstName: ko.observable()
}
$(document).ready(function(){
departmentVM.departmentName = "SomeDepartment";
for (i=1; i<=5; i++){
var person = Object.create(personVM);
personVM.firstName("EMP - " + i.toString());
departmentVM.employees.push(personVM);
}
ko.applyBindings(departmentVM);
});
这增加了五个名称(EMP-1,EMPT-2等)。然后我用以下标记显示名称:
<div data-bind="foreach: employees">
<label data-bind="text: firstName"></label>
</div>
我的输出是名称“EMP-5”的五倍。它始终是我添加到数组中的最后一个值。
我认为问题是我有五个personVM实例,但每个实例中的firstName对象都指向相同的observable。它是否正确?
我需要做什么才能获得理想的结果?
这就是答案。你能解释为什么这个工作吗?我的对象是否需要成为函数才能使用'this'对象? – 2014-09-04 01:39:06
是的, 函数被称为“类”,您可以创建新的实例,并且在这些函数内,这指的是特定实例的属性。如果你看看淘汰赛的主页教程,那么他们也是这样做的。 – 2014-09-04 02:13:58