6

ユーザーの編集フォームを作成しています。ユーザーの役割は、デフォルトでは複数選択で選択されていません。

アプリケーションの役割には、「管理者」と「モデレーター」の 2 つがあります。サンプル ユーザーには、「管理者」ロールが 1 つあります。これはデフォルトでは選択されていません。

http://jsfiddle.net/jgT8s/4/

html:

<form data-bind="with: user">
    <select id="selectRoles"
        data-bind="options: $root.allRoles, selectedOptions: Roles, optionsText: 'Name', optionsValue: 'Id'"
        multiple="true"
        size="5">
    </select>
</form>

js:

var User = function () {
    var self = this;

    self.Id = ko.observable(1337);
    self.Username = ko.observable('pietpaulusma');
    self.Roles = ko.observableArray([{ Id: 1, Name: 'Administrator' }]);
};

function UserViewModel() {
    var self = this;

    self.user = ko.observable(new User());
    self.allRoles = ko.observableArray([{ Id: 1, Name: 'Administrator' }, { Id: 2, Name: 'Moderator' }]);
}

ko.applyBindings(new UserViewModel());

UPDATE はdependentObservableを作成し、それをselectedOptionsにマップしました

self.RoleIds = ko.dependentObservable(function () {
        return ko.utils.arrayMap(self.Roles(), function (role) {
            return role.Id;
        });
    });

作業バージョン: http://jsfiddle.net/jgT8s/5/

4

2 に答える 2

6

問題は、Roles「完全な」オブジェクトが含まれているのに対し、値の部分のみが含まれている必要があることです。

self.Roles = ko.observableArray([1]);

ここを見てください:http://jsfiddle.net/Vkda5/

于 2012-11-22T17:18:39.047 に答える
3

Knockout では、選択したオプションを値で比較する必要があります。Idこの場合はoptionsValue: 'Id'. そして、Roleオブジェクトの配列を渡しています。代わりに配列を渡す必要がありIdます:

var User = function () {
    ...
    self.Roles = ko.observableArray([1]);
};
于 2012-11-22T17:13:59.873 に答える