2017-06-15 117 views
0

我想从现有viewModel解析特定元素并将其放入新数组中。在knockout.js viewmodel中存储特定元素

我有一个应用程序视图模型,它有大量的申请人信息。这就是所谓的以下列方式:

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

enter image description here

因此,“应用程序”的对象中有几个元素如所示的连接的图像中的上方。

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

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

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

enter image description here

我刚刚起步的新视图模型内相同的“应用程序”对象。 如何获得只有“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”为applicationKey对象的唯一“一个”元素。

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

enter image description here

回答

1

arrayFilter滤镜数组如果该项目符合您查询条件或者不是函数返回true或false。您需要改为arrayMap

+0

请问在这种特殊情况下如何使用它? – Dukakus17

+1

用'arrayMap'直接替换'arrayFilter',一切都保持不变。 'arrayMap'函数返回你想要映射项目的任何东西,在这种情况下是一个标量值。 –

+0

谢谢!它现在有效。你能回答我的第二个连接问题吗?如果可能,请看看我的编辑。非常感谢! – Dukakus17