javascript - 从可观察数组中获取对象

标签 javascript knockout.js

为什么 m 在这段代码中是“未定义的”:

currentViewModel = ko.mapping.fromJS(viewModel);
currentViewModel.getReport = function(reportId) {
    for(var i=0;i<currentViewModel.availableReports().length;i++) {
        if(currentViewModel.availableReports()[i].id == reportId) {
            var m = currentViewModel.availableReports()[i];
            return currentViewModel.availableReports()[i];
        }
    }
}

我将 getReport() 作为 onclick 事件调用,我想将报告对象发送到 View (模态)我可以对 availableReports 执行 foreach,它就在那里。当我运行调试器时,它会遍历数组并找到正确的数组。但是为什么我不能把它从数组中拉出来呢? “m”保持未定义,函数返回未定义。

我在这里错过了什么?

编辑:这里有一个跟进问题: Can knockout.js wait to bind until an onClick?

最佳答案

您只需将 if(currentViewModel.availableReports()[i].id ... 更改为 if(currentViewModel.availableReports()[i].id() .. . 因为在映射之后 id 将成为一个可观察的,即函数。

更新代码:

currentViewModel = ko.mapping.fromJS(viewModel);
currentViewModel.getReport = function(reportId) {
    for (var i = 0; i < currentViewModel.availableReports().length; i++) {
        if (currentViewModel.availableReports()[i].id() == reportId) {
            var m = currentViewModel.availableReports()[i];
            return currentViewModel.availableReports()[i];
        }
    }
}

演示 - Fiddle .

关于javascript - 从可观察数组中获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35376342/

相关文章:

javascript - CSS 动画导致 z-index 问题

javascript - AngularJS $从 templateURL 编译 HTML

javascript - 更改数组时 Knockout JS 不更新

javascript - 链接 Knockout 自定义绑定(bind)

javascript - 函数调用正在堆积

javascript - 如何递归合并 2 个 javascript 对象?

javascript - 两个具有 onclick 事件的类似跨度,其中一个不起作用?

javascript - 如何在 chrome 中进行调试以获取 knockout 中可观察值的值?

knockout.js - 使用knockout.js动态生成下拉列表并绑定(bind)选项

javascript - knockout 中的选项绑定(bind)问题