在 knockout.js 视图模型(数组)中存储特定元素

Posted

技术标签:

【中文标题】在 knockout.js 视图模型(数组)中存储特定元素【英文标题】:storing specific element in knockout.js viewmodel (array) 【发布时间】:2017-11-18 12:28:48 【问题描述】:

我想从现有 viewModel 中解析特定元素并将其放入一个新数组中。

我有一个应用程序视图模型,其中包含大量申请人信息。调用方式如下:

 self.applications = ko.observableArray(@html.Json(Model.ApplicationCompatibilities.Select(o => o.JsonForm)) || []);

所以“应用程序”对象中有几个元素,如上图所示。

我想做的是,我只想将“applicationKey”元素检索到一个新数组中。所以我所做的是:

            self.previewApplication = ko.computed(function () 
                return ko.utils.arrayFilter(self.applications(), function (i) 
                    return i.application.applicationKey;
                );
            );

我打算遍历“self.applications()”视图模型并仅返回“application.applicationKey”。但我这样做实际上得到的是:

我只是在新的 viewModel 中获得了相同的“应用程序”对象。 我怎样才能得到一个只有“application.applicationKey”的数组?

谢谢!请帮忙!

编辑:

现在可以了!现在我的 viewModel.previewApplication() 给了我一个 applicationKey 的列表。现在我想做的是,我想添加一个加载模式的链接。在该模式中,我想显示具有特定“applicationKey”的特定“应用程序”

例如,模态框的链接如下所示:

<a href="#" data-toggle="modal" data-target="#previewApplicantModal" data-bind="attr:  'data-applicationKey': application.applicationKey ">
     Preview Application
</a>

所以如果我检查链接的元素,它有一个新的数据绑定:

<a href="#" data-toggle="modal" data-target="#previewApplicantModal" data-bind="attr:  'data-applicationKey': application.applicationKey " data-applicationkey="abc976cfx">
    Preview Application
</a>

最后,我想遍历“应用程序”对象并仅返回以“abc976cfx”为应用程序键的对象的“一个”元素。

有没有简单的方法来做到这一点?我附上了截图以便更好地解释。

【问题讨论】:

【参考方案1】:

arrayFilter 过滤数组,如果项目与您的过滤条件匹配,则函数返回 true 或 false。你想要arrayMap

【讨论】:

您能告诉我在这种特定情况下如何使用它吗? arrayMap 直接替换arrayFilter,其他一切都保持不变。 arrayMap 的函数返回您想要将项目映射到的任何内容,在本例中为标量值。 谢谢!现在可以了。你能回答我的第二个连接问题吗?如果可能,请查看我的编辑。非常感谢! 按站点规则,额外问题应单独提交(但您可以链接回原件);没有人会查看标记为已回答的问题,因此您正在扼杀获得答案的机会。

以上是关于在 knockout.js 视图模型(数组)中存储特定元素的主要内容,如果未能解决你的问题,请参考以下文章

在 knockout.js 中将 observable 从一个视图模型传递到另一个视图模型

多视图模型破坏了 knockout.js

knockout.js remove 不适用于主视图模型中的嵌套视图模型和视图模型

knockout.js 主视图模型中的一个视图模型(添加项目变得未定义)

Knockout.js - 封装视图模型并从外部隐藏它们

将 MVC 模型转换为 Knockout JS ViewModel