击倒可观察器
knockout observablearray of observables
本文关键字:观察 更新时间:2023-09-26
我遇到了Knockout ObservableArray的问题,该数组由具有可观察属性的对象组成。我的视图模型相当复杂,但我已经创建了下面的简单测试,它将说明问题。
我的问题是,当我更改ObservableArray中某个对象的可观察属性的值时,该值将更改为数组中ALL对象的值。
我有一个部门视图模型,它有一个可观察到的该部门员工数组。然后,我创建了对象personVM的5个实例,这些实例被推送到员工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对象指向相同的可观察对象。这是正确的吗?
我需要做些什么才能得到想要的结果?
试试这个
http://jsfiddle.net/r9sqjojL/2/
<div data-bind="foreach: employees">
<label data-bind="text: firstName"></label>
</div>
var departmentVM = {
employees: ko.observableArray(),
departmentName: ko.observable()
};
var personVM = function() {
this.firstName = ko.observable();
}
departmentVM.departmentName = "SomeDepartment";
for (i=1; i<=5; i++){
var person = new personVM();
person.firstName("EMP - " + i.toString());
departmentVM.employees.push( person );
}
ko.applyBindings(departmentVM);
相关文章:
- knockoutjs可观察数组
- 多次发射多个可观察器的问题
- 未激发路由的控制器属性上的观察者
- 无法在关闭弹出窗口时传递可观察的数据
- firefox插件:退出不工作的应用程序观察器
- 如何收集Knockout可观察性以放入JSON
- 在rxjs中巧妙的蒸汽可观察合并
- Knockout observable没有观察到其中一个属性
- 将属性设置为未定义时未通知观察者
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- KOValidation在错误消息中获取可观察值、$index()、$data等
- 启用具有多个布尔可观察标志的绑定
- 为什么prototypjs观察到回调函数有绑定
- Ember:当子控制器同时观察到父控制器触发请求的相同属性时
- 检测 DIV 的高度何时变化,而无需轮询或突变观察者
- 财产'catch'在类型'可观察<任意>'
- 在另一个可观察量完成后触发第二个表单提交单击
- 如何使用javascript设置元素旋转和动态观察的动画
- 如何正确处理依赖ViewChild和Angular 2中可观察到的数据的组件上的更改检测
- JavaScript:为什么Addy's观察者模式