2013-04-25 63 views
1

我正在創建複選框列表。該列表是從此對象創建的:通過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="" /> 

它產生沒有結果,檢查某些框。不知道如何應用此綁定。由於

回答

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"/> 

當然,這隻有在RolesdefinedRoles都是字符串數組時纔有效。

0

由於角色是可觀察到的,你沒有正確調用它:

$root.userToAdd.Roles().Active 

雖然,因爲它是一個數組,然後.Active是不會解決任何事情,我還以爲。

它是否只是一個字符串數組,詳述用戶所處的角色?如果是,那麼你需要的線沿線的做一些事情:

$root.userToAdd.Roles.indexOf(Name()) !== -1 

,看看如果數組包含角色的字符串。