如何修复knockoutjs中未定义的属性错误

How to fix undefined property error in knockoutjs

本文关键字:属性 错误 未定义 何修复 knockoutjs      更新时间:2023-09-26

大多数时候,我在敲除中得到一些"未定义"属性的错误。我在stackoverflow上找到了同样的解决方案。它对简单的绑定是有效的,但我的问题是,我如何使用这种技术进行"foreach"绑定,就像我尝试过的一样

在这里演示

以下代码不起作用

<table>
  <tbody data-bind="foreach: model.mappings">
    <tr>
     <td>
    <select data-bind="options:mappings.variableList, optionsText:'Key',optionsValue:'Value', value:mappings.selectedVariable>
    </select>
   </td></tr></tbody></table>

但下面的代码是工作

<table>
  <tbody data-bind="foreach:mappings">
    <tr>
     <td>
    <select data-bind="options:variableList, optionsText:'Key',optionsValue:'Value', value:selectedVariable>
    </select>
   </td></tr></tbody></table>

两者的Js相同,如:

var list = //some array
var arr =// [{variableList : list}];
var model={
mappings:ko.observableArray(arr)
}
ko.applyBindings......

想象一下,您的"模型"是一个函数。在html中绑定时,您只能访问模型的局部变量。模型本身不可见,因为这超出了您的范围。映射是模型中的一个变量,这就是为什么只需编写foreach: mappings就可以访问它。model不是模型的一部分,它是模型。。。希望这能有所帮助。

此外,当你写foreach: mappings时,你会进入一个foreach循环,所以这就是为什么你不写mappings.PropertyName,而只写PropertyName

编辑:我对你帖子的评论完全错误,所以我删除了它