【发布时间】:2011-09-23 08:50:40
【问题描述】:
例如,可观察数组是使用映射函数 (ko.mapping.fromJS) 设置的。 如何根据可观察数组中的值对 div 的可见性进行数据绑定?
【问题讨论】:
-
如果你能描述你绑定到什么类型的数据和/或值,你将能够得到一个更好的答案。例如,您是否使用:布尔值,值
-
请看下面对 nEEbz 的评论
标签: knockout.js
例如,可观察数组是使用映射函数 (ko.mapping.fromJS) 设置的。 如何根据可观察数组中的值对 div 的可见性进行数据绑定?
【问题讨论】:
标签: knockout.js
需要注意的是,当您使用ko.observableArray 时,它只是观察数组,而不是数组中的单个对象。因此,如果从数组中推送或弹出任何内容,则敲除将注意到并更新模板,但如果数组的单个对象发生更改,例如数组成员的某个属性发生变化,敲除不会更新模板。
解决方法是分别观察数组中你想订阅的数组成员。在您的情况下,假设可观察数组中的值位于第一个索引成员中,那么您需要在视图模型中执行以下操作:
theArray: ko.observableArray(initialArray);
theValue: ko.observable(this.theArray[0]);
和 div 可见性:
<div data-bind="visible: theValue.something"></div>
编辑:
您的方案的问题是,如果某个用户成为管理员,则剔除将不会呈现模板,因为它没有跟踪数组中每个用户的单个属性。它只会在您添加/删除用户数组时呈现模板。
如果用户设置为管理员,为了确保它重新呈现模板,我们需要做这样的事情 >
//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]);
}
【讨论】: