Knockout.js 敲除绑定多个可观察数组

Knockout.js 敲除绑定多个可观察数组,knockout.js,Knockout.js,我正在寻找一些关于处理两个对象数组(一个是另一个的子集)和复选框的最佳方法的建议 基本上我以这个为例。我实际使用的代码完全支持数据库和其他一切 我试图在一整套成员和选定的成员子集之间实现复选框之间的绑定 // member model var Member = function(item) { var self = this; self.id = item.id; self.avatar = item.avatar; self.name = item.name;

我正在寻找一些关于处理两个对象数组(一个是另一个的子集)和复选框的最佳方法的建议

基本上我以这个为例。我实际使用的代码完全支持数据库和其他一切

我试图在一整套成员和选定的成员子集之间实现复选框之间的绑定

// member model
var Member = function(item) {
    var self = this;

    self.id = item.id;
    self.avatar = item.avatar;
    self.name = item.name;
};
基本上,我有三个属性,我不会修改以下模型

// card model
var Card = function (item) {
    var self = this;

    self.cardId = item.id;
    self.title = ko.observable(item.title);
    self.description = ko.observable(item.description);
    self.contentItemId = ko.observable(item.contentItemId);
    self.dueDate = ko.observable("");
    self.comments = ko.observable(0);
    self.openItems = ko.observable(0);
    self.completedItems = ko.observable(0);
    self.labels = ko.observable("");
    self.members = ko.observable("");
    ...
};
这就是魔法需要发生的地方。根据定义,数据库将成员存储为逗号分隔的列表,例如(“,1,2,3,4,5”)。我已经编写了检索完整的成员列表和要填充的单个成员的代码

    self.members = ko.observable([]);
我的想法是,在首次初始化个人卡时,使用适当的成员更新个人

到目前为止还不错

在视图中,我想触发self.editMembers功能,根据定义,该功能应该隐藏cardLeftColumn中的所有内容(很可能除了卡片标题之外),并显示成员的完整列表(表),另外还有两个按钮来保存关闭

到目前为止还不错

我现在的主要问题是,人力资源管理,我该怎么说,复选框。当我调用self.editMembers时,我希望在Card.members数据集中选中这些用户的复选框。仅澄清一下卡片。成员将包含Board.members数组(尚未定义)的子集

如果您看一看,您会注意到,此时我在表行上绑定了一个卡.会员的列表,这是因为我不确定如何实现我希望实现的目标

我也不知道如何在save操作中检索所选成员的列表(然后我需要将其保存在数据库中)

我不确定的另一件事是如何绑定卡上的编辑链接/按钮,使分配给特定卡的成员可见(card.members)。在这方面的任何建议都会派上用场,但不会阻止演出。我还没有完全确定我将如何确定哪个用户正在查看页面。但它很像是用户id。换句话说,我可能最终会比较页面查看器的用户idCard.members.id来确定他们是否可以使用编辑链接/按钮

作为总结,我想从以下几点中得到一些建议:
1.如何在两个数据集之间链接复选框
2.如何在保存操作中获取选中成员列表
3.还有一点建议,告诉您如何对未分配到该卡的用户隐藏编辑链接/按钮

感谢您抽出时间阅读我的帖子

更新1 在我的例子中添加了fiddler链接,我也提到了这个例子

因此,为了重述一下@Haridarshan在下面提供了一些有趣的建议

昨晚,我从数据库中获取了所有成员的列表,并将它们添加为

self.members = ko.observable([]);
在BoardViewModel上。就在我用会员卡初始化会员名单之前,我取了一份会员名单并进行了初始化

// member model
var Member = function(item) {
    var self = this;

    self.id = item.id;
    self.avatar = item.avatar;
    self.name = item.name;
};
我还获取分配给每张卡的单个成员,并初始化
self.members=ko.observeable([])

实际上,我是要将BoardViewModel中的所有成员数组绑定到表上,但我最终得到一个错误,即我的BoardViewModel.members在当前上下文中未定义,这将是真的,因为我尝试绑定的表也将在Card.members的上下文中

我需要根据@Haridarshan提供的建议在上面涂鸦一下。所以我们要看看我从这里得到了什么

更新2 使用@Haridarshan的一些建议,我成功地使用
if:function(ref)
-绑定了编辑链接/按钮。还没有100%的工作,但已经差不多了

我用
self.isChecked=ko.observable(false)扩展了模块模型
现在我可以获得已选中的成员。这意味着我可以向数据库发送新的已分配成员列表

self.members(jQuery.map(data, function (item) {
    return new Member(item);
}));

这仍然留下了将所有成员绑定到表中的问题。我尝试了
$root.members
,但没有给出我想要的结果。但即使是这样,我仍然不确定如何将该列表交叉核对到卡。会员。我可能最终修改了self.editMembers函数来实现这一点。

据我所知,self.members包含成员模型。因此,您可以通过映射将数据映射到self.members。假设self.members是一个可观察的数组数据是来自数据库的成员详细信息的响应数据

self.members(jQuery.map(data, function (item) {
    return new Member(item);
}));
在html中,使用foreach绑定,可以显示带有复选框的所有成员列表。所以,您需要在成员模型中添加可观察的复选框

var Member = function(item){
    var self = this;

    self.id = item.id;
    self.avatar = item.avatar;
    self.name = item.name;
    self.isChecked = ko.observable(false);
    self.isVisible = ko.observable(<conditional statement whether to hide or show>);
}

你还没有提供小提琴链接。非常有趣的建议。我很抱歉,我在发布这篇文章时有点匆忙,直到现在才意识到我实际上还没有联系到我所指的fiddler。谢谢你的建议。我能够很好地利用其中的一些,并学到一些新的东西。
var Card = function (item) {
    var self = this;
    ...
    ...
    self.Save = function(data){
        //using ko.utils.arrayForEach, loop through all members and check for isChecked observable
        // and do whatever you want to do.
    }
}