0

私は問題を抱えており、解決方法がわかりません。

プロジェクトを含むこのページがあります。各プロジェクトにはメンバーがいて、各メンバーは 1 つ以上のロールを持つことができます。割り当てられたすべてのロールが「チェック」され、これらの変更を反映してモデルを更新しながら各メンバーにロールを追加または削除できる、ある種の「ピックリスト」を示したいと思います。

簡単なhttp://jsfiddle.net/vinblad/PhQRr/1/を作成して、私が何を得ているかを示しましたが、私が言ったように、これを解決する方法についての手がかりがないので、どんな助けも素晴らしいでしょう!

ビューモデルのコードは次のとおりです。

var viewModel = new function() {
   var self = this;
   self.project = ko.observable();
   self.roles = ko.observable();
};

viewModel.load = function() {
   var data = {"project":{"members":[{"member":{"name":"Vinblad
   Anders","id":13,"isDeleted":false},"roles":[{"name":"Editor","id":1,
   "isDeleted":false},{"name":"Admin","id":2,"isDeleted":false}],"id":1},{"member":
   {"name":"Gramer Mikael","id":14,"isDeleted":false},"roles": 
   [{"name":"Reader","id":1,"isDeleted":false}],"id":2}],"name":"Project 
   XYZ","number":338,"id":1},"roles":[{"name":"Admin","id":1,"isDeleted":false},  {
   "name":"Editor","id":2,"isDeleted":false}, {
   "name":"Reader","id":3,"isDeleted":false}]}
   viewModel.loadView(data);
};
viewModel.loadView = function(data) {
    viewModel.project(data.project);
    viewModel.roles(data.roles);
    ko.applyBindings(viewModel);    
};

viewModel.load();

このサンプルでは、​​データはハードコーディングされています。実際には、データは Web サービスから取得され、knockoutjs.mapping プラグインを使用しています。

4

2 に答える 2

1

私は問題を見ていません。あなたが述べているように再帰的ではありません。プロジェクトの子がメンバーとしてプロジェクトを持っていた場合、それは再帰的です。

RoleViewModel の配列を持つ MemberViewModel の配列を持つ ProjectViewModel の配列を持つ EditProjectMembersViewModel の 4 つの ViewModels を作成します。

または、マッピング プラグイン http://jsfiddle.net/Ed8Fv/から自動生成されたビューモデルを使用するだけです

ko.applyBindings(ko.mapping.fromJS(data));
于 2012-11-15T11:32:54.283 に答える
0

ノックアウトでチェックボックスリストを作成する方法の非常に基本的な例を投稿しました。私の例には、あなたが言及したようにロールを動的に追加する機能がありません。ただし、observableArray を使用してそれを行うことができるはずです。

于 2013-08-18T13:18:48.503 に答える