如何将子集合绑定到knockout中的不同复选框列表

时间:2012-11-15 08:40:05

标签: knockout.js knockout-2.0

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

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

我已经创建了一个简单的http://jsfiddle.net/vinblad/PhQRr/1/来展示我的目标,但正如我所说,我不知道如何解决这个问题所以任何帮助都会很棒!

这是viewmodel代码:

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插件。

2 个答案:

答案 0 :(得分:1)

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

创建4个ViewModel一个EditProjectMembersViewModel,它有一个ProjectViewModel数组,该数组有一个MemberViewModel数组,其中包含一个RoleViewModel数组

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

ko.applyBindings(ko.mapping.fromJS(data));

答案 1 :(得分:0)

我已经发布了一个如何create a checkbox list with knockout的基本示例。我的例子没有像你提到的那样动态添加角色的能力。但是,您应该能够使用observableArray。