用Knockout绑定到两个对象的复选框
Checkboxes binding to two objects with Knockout
我正在创建一个复选框列表。列表是由这个对象创建的:
this.definedRoles = ko.observableArray([]);
但是另一个对象有哪些框应该被选中。
this.userToAdd = {
ID: ko.observable(""),
FirstName: ko.observable(""),
LastName: ko.observable(""),
Active: ko.observable(""),
Email: ko.observable(""),
Roles: ko.observableArray([])//these are the values of the checkboxes
};
我能够生成复选框使用:
<ul data-bind="foreach: $root.definedRoles" style="list-style:none;">
<li>
<label class="checkbox">
<input type="checkbox" data-bind="value: Id" value="" />
<span data-bind="text: Name"></span>
</label>
</li>
</ul>
每次我尝试使用
添加绑定以选中某些框时<input type="checkbox" data-bind="value: Id, checked: $root.userToAdd.Roles.Active" value="" />
没有结果。不确定如何应用此绑定。由于
您可以做的是添加一个函数来检查给定的用户是否拥有该角色,如下所示:
var User = function() {
var self = this;
self.ID = ko.observable(""),
self.FirstName = ko.observable(""),
self.LastName = ko.observable(""),
self.Active = ko.observable(""),
self.Email = ko.observable(""),
self.Roles = ko.observableArray([])//these are the values of the checkboxes,
self.IsRoleActive = function(role) {
for(i=0; i<self.Roles().length; i++) {
if(self.Roles()[i] == role && self.Roles()[i].Active) {
return true;
}
}
return false;
}
};
var userToAdd = new User();
然后你的绑定应该是这样的:
<input type="checkbox"
data-bind="value: Id, checked: $root.userToAdd.IsRoleActive"/>
当然,只有当Roles
和definedRoles
都是字符串数组时,这一切才有效。
因为Roles是一个可观察对象,你没有正确调用它:
$root.userToAdd.Roles().Active
虽然它是一个数组,那么.Active
不会解析到任何东西,我想。
它只是一个字符串数组,详细说明了用户的角色吗?如果是,那么您需要执行以下操作:
$root.userToAdd.Roles.indexOf(Name()) !== -1
查看数组是否包含角色的字符串
相关文章:
- 正在更新mongod中两个对象内部的数组
- 添加两个对象以获取值的总和
- 如何使用javascript合并两个对象数组
- 在JavaScript中相等两个对象.在更改一时,秒会自动更改
- 如何使用AngularJs比较两个对象的JSON
- 如何在javascript中合并两个对象数组
- JavaScript - 合并两个对象数组并根据属性值删除重复数据
- Javascript如何确定两个对象是否相同
- 比较两个对象数组
- Javascript tests - 如何比较 Jasmine 中的两个对象
- JavaScript:为什么 array.push() 附加两个对象而不是一个对象
- 两个对象相等,但 js 确实说假
- 两个对象之间的Javascript原型
- 使用angularjs或javascript的两个对象数组的交集
- 合并两个对象而不覆盖
- 如何获取具有相同值的两个对象,并将其视为一个对象
- 比较两个对象数组中的重复对象,并在其'这在JavaScript中不是重复的
- 比较underscorejs中的两个对象数组
- 查找/合并具有共同属性的两个对象
- 有没有一个lodash函数可以合并两个对象并删除其中一个对象的属性(如果它们没有)'不存在于另一个中