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

結果が出ません。このバインディングを適用する方法がわかりません。ありがとう

4

2 に答える 2

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が両方とも文字列の配列である場合にのみ機能します。

于 2013-04-25T18:45:13.023 に答える
0

Roles はオブザーバブルであるため、正しく呼び出していません。

$root.userToAdd.Roles().Active

配列なので.Active何にも解決しないと思っていたのですが。

ユーザーの役割を詳述する単なる文字列の配列ですか? そうである場合は、次の行に沿って何かを行う必要があります。

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

配列に役割の文字列が含まれているかどうかを確認します。

于 2013-04-25T18:38:40.197 に答える