从observableArray中获取具体元素

Jes*_*uez 20 knockout.js

这似乎很容易,但两个小时后我的头疼了.

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

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

我的observableArray是这样的:

categories[category { Id=2,  Name="Pink", ...}, category { Id=1,  Name="Green",  ...}]
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

编辑:

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

}.bind(viewModel);
Run Code Online (Sandbox Code Playgroud)

RP *_*yer 46

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

你会像这样使用它:

selectedId = 2;

var category = ko.utils.arrayFirst(categories(), function(category) {
   return category.Id === selectedId;
});
Run Code Online (Sandbox Code Playgroud)

  • 我的猜测是item.Id是2和$("#Categories").val()是"2".您可以对结果执行parseInt或使用==而不是===.您是否有理由读取元素的val()而不是在视图模型中跟踪该值? (2认同)