为什么 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/