2013-04-25 2 views
1

Я создаю список флажков. Список создается с этого объекта:Флажки, привязанные к двум объектам с нокаутом

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

Конечно, все это работает только в том случае, если Roles и definedRoles - оба массива строк.

0

Как ролям является наблюдаемой, вы не называть его правильно:

$root.userToAdd.Roles().Active 

Хотя, как это массив, то .Active не собирается решить ни к чему, я бы подумал.

Это всего лишь массив строк, описывающий роли, в которых находится пользователь? Если это так, то вам нужно сделать что-то вдоль линий:

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

, чтобы увидеть, если массив содержит строку роли.

Смежные вопросы