Javascript 淘汰赛:can';无法从嵌套的foreach访问父作用域属性

Javascript 淘汰赛:can';无法从嵌套的foreach访问父作用域属性,javascript,knockout.js,Javascript,Knockout.js,我试图从嵌套的foreach中访问根级别属性 <!-- ko foreach: { data: items, 'as': 'item' } --> <tr data-bind="foreach: { data: $parent.columns, 'as': 'column' }" > <td>{{ item[column.key] }}</td> <!-- ko if: $root.thing --> <td

我试图从嵌套的foreach中访问根级别属性

<!-- ko foreach: { data: items, 'as': 'item' } -->
<tr data-bind="foreach: { data: $parent.columns, 'as': 'column' }" >
  <td>{{ item[column.key]  }}</td>
    <!-- ko if: $root.thing -->
    <td><button class="btn btn-default" >click me</button></td>
    <!-- /ko -->            
</tr>
<!-- /ko -->
在组件中,我们有:

return function(params) {
    this.thing = params.thing;
    this.items = params.stuff.items;
    this.columns = [{key: 'one'}, {key: 'two'}];
})

$root
引用的是视图模型,而不是组件,请使用
$parents[]
。从淘汰3.3开始,您还可以使用
$component

它应该是
$parents[1]
,它相当于root。虽然这可能无法解决您的问题,因为
$parents[1]。但这仍然是错误的。显示更多像viewmodel一样的代码(但不是全部)会很有帮助。实际上,
$parents[1]。这件事很管用,但我还是想知道为什么
$root
不管用。是因为它是一个组件吗?哦,我明白了,这是一个组件,
$root
将不起作用,因为它将查看viewmodel的根变量。是的,我可以使用$component作为淘汰3.3。是的,$component是中的$root等价物,如果您在特定组件模板的上下文中。但是我想评论一下你的答案,
$root
对一个组件有效,它不会查看组件的基本变量,而是查看视图模型中的成员变量,即你在applyBindings中传递的模型。
return function(params) {
    this.thing = params.thing;
    this.items = params.stuff.items;
    this.columns = [{key: 'one'}, {key: 'two'}];
})