0

我有一个问题,我不知道如何解决。

我有这个页面,其中包含一个项目。每个项目都有成员,每个成员可以有一个或多个角色。我想展示某种“选择列表”,其中所有分配的角色都被“选中”,并且可以在更新模型以反映这些更改的同时从每个成员中添加或删除角色。

我创建了一个简单的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

我没有看到问题,它甚至不像你所说的那样递归,如果项目的孩子有一个项目作为成员,那么它将是递归的。

创建 4 个 ViewModel 一个 EditProjectMembersViewModel,它有一个 ProjectViewModel 数组,它有一个 MemberViewModel 数组,它有一个 RoleViewModel 数组

或者只是使用映射插件http://jsfiddle.net/Ed8Fv/中自动生成的 Viewmodels

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

我发布了一个非常基本的示例,说明如何使用 knockout 创建复选框列表。我的示例无法像您提到的那样动态添加角色。但是,您应该能够使用 observableArray 来做到这一点。

于 2013-08-18T13:18:48.503 回答