从observableArray中获取具体元素

时间:2011-08-12 17:29:27

标签: knockout.js

这看起来很容易,但两个小时后我的头疼了。

我有一个categoryIndex(来自select),我想从具有该Id的observableArray中获取该类别。

我是怎么做到的?我尝试使用indexOf(但我不确定它是如何工作的,当然我看了doc),我尝试了linq.js但是Where很难使用或者我很愚蠢(我不知道如何从类别中获取Id并比较它。)

我的observableArray是这样的:

categories[category { Id=2,  Name="Pink", ...}, category { Id=1,  Name="Green",  ...}]

所以,如果我的索引是2,我只需要一种方法来获得“粉红色”类别。

谢谢。

编辑:

viewModel.addNote = function() {
    var selectedCategoryIndex = $("#Categories").val();
    var selectedCategory = ko.utils.arrayFirst(this.categories(), function(item) {
        return item.Id === selectedCategoryIndex;
    });

}.bind(viewModel);

1 个答案:

答案 0 :(得分:46)

我通常使用KO实用程序函数ko.utils.arrayFirst来执行此类操作。它只是遍历一个数组并返回与传递给它的谓词相匹配的第一个项。

您可以这样使用它:

selectedId = 2;

var category = ko.utils.arrayFirst(categories(), function(category) {
   return category.Id === selectedId;
});