【问题标题】:How do I change knockoutJS visibility depending on a value within an observable array using foreach如何使用 foreach 根据可观察数​​组中的值更改 knockoutJS 可见性
【发布时间】:2011-09-23 08:50:40
【问题描述】:

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

【问题讨论】:

  • 如果你能描述你绑定到什么类型的数据和/或值,你将能够得到一个更好的答案。例如,您是否使用:布尔值,值
  • 请看下面对 nEEbz 的评论

标签: knockout.js


【解决方案1】:

需要注意的是,当您使用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]);
}

【讨论】:

  • 说你有一个用户列表,如果用户设置了 IsAdmin 布尔字段,你想显示一个按钮,你的解决方案将不起作用,因为我需要条件来测试 foreach 模板中的每个项目.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-30
  • 2012-04-20
  • 1970-01-01
  • 2014-12-24
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
相关资源
最近更新 更多