因此,例如,使用映射函数(ko.mapping.fromJS)设置可观察数组。 如何根据可观察数组中的值对数据绑定div的可见性进行数据绑定?
答案 0 :(得分:1)
重要的是要注意,当您使用ko.observableArray
时,它只是观察数组,而不是数组中的单个对象。因此,如果从数组推送或弹出任何内容,则敲除将注意到并更新模板但是如果数组的单个对象发生了变化,例如更改了数组成员的某个属性,knockout将不会更新模板。
解决方案是分别观察您要订阅的数组中的数组成员。在您的情况下,假设observable数组中的值是否位于第一个索引成员中,那么您需要在视图模型中执行以下操作:
theArray: ko.observableArray(initialArray);
theValue: ko.observable(this.theArray[0]);
和div的可见性:
<div data-bind="visible: theValue.something"></div>
修改强>
您的方案存在的问题是,如果某个用户成为管理员,则淘汰不会呈现模板,因为它不跟踪数组中每个用户的各个属性。只有在添加/删除用户数组时才会呈现模板。
要确保在用户设置为管理员时重新呈现模板,我们需要执行以下操作&gt;
//declare the view model
var viewModel = {
users: ko.observableArray(listOfUsers); //you need to pass the users list array you get from ko.mapping
}
//make each array member observable
for (var i = 0; i < viewModel.users().length; i++) {
viewModel.users()[i] = ko.observable(users()[i]);
}