如何使用foreach根据可观察数​​组中的值更改knockoutJS可见性

时间:2011-06-27 09:25:37

标签: knockout.js

因此,例如,使用映射函数(ko.mapping.fromJS)设置可观察数组。 如何根据可观察数​​组中的值对数据绑定div的可见性进行数据绑定?

1 个答案:

答案 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]);
}