我正在创建一个复选框列表。该列表是从此对象创建的:
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="" />
没有结果。不确定如何应用此绑定。感谢
答案 0 :(得分:1)
你可以做的是添加一个检查给定用户是否具有角色的函数,如下所示:
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
都是字符串数组时,这一切才有效。
答案 1 :(得分:0)
由于角色是可观察的,你没有正确地称它为:
$root.userToAdd.Roles().Active
虽然它是一个数组,但.Active
不会解决任何问题,我想过。
它只是一个字符串数组,详细说明了用户所处的角色吗?如果是,那么你需要做一些事情:
$root.userToAdd.Roles.indexOf(Name()) !== -1
查看数组是否包含角色的字符串。