Javascript 访问$parent';敲除视图中的s$parent-嵌套上下文
为简洁而更新 如何使用绑定在嵌套的敲除foreach/中引用$parents的$parent 范例-Javascript 访问$parent';敲除视图中的s$parent-嵌套上下文,javascript,knockout.js,Javascript,Knockout.js,为简洁而更新 如何使用绑定在嵌套的敲除foreach/中引用$parents的$parent 范例- <!-- ko foreach: grandParent --> <tr> <!-- ko foreach: $parent.parents --> // <-- Doesn't work <!-- ko foreach: children -->
<!-- ko foreach: grandParent -->
<tr>
<!-- ko foreach: $parent.parents --> // <-- Doesn't work
<!-- ko foreach: children -->
<td data-bind="if: favToy().name == $parent.$parent.favToy().name">
<span data-bind="text: favToy().name"></span>
</td>
<!-- /ko -->
<!-- /ko -->
</tr>
<!-- /ko -->
//使用$parents
数组,祖父母将是$parents[1]
。如果示例中的祖父母
对象是最顶层的父对象,则也可以使用$root
从:
$parents
这是一个表示所有父视图模型的数组:
$parents[0]是父上下文中的视图模型(即,它是
与$parent相同)
$parents[1]是祖父母上下文中的视图模型
$parents[2]是曾祖父母上下文中的视图模型
……等等
$root
这是根上下文中的主视图模型对象,即
最顶层的父上下文。通常是传递给的对象
ko.applyBindings。它相当于$parents[$parents.length-1]
您可以使用$parentContext.$parent
$parentContext
提供了许多有用的属性,例如($data
,$parent
,$index
,…)我认为这样使用noChildContext设置会更容易:
使用“as”而不创建子上下文
as选项的默认行为是为当前项添加名称,同时仍将内容绑定到该项。但您可能希望保持上下文不变,只设置当前项的名称。后一种行为可能是未来版本的Knockout的默认行为。要为特定绑定启用它,请将noChildContext选项设置为true。当此选项与as一起使用时,对数组项的所有访问都必须通过给定的名称,并且$data将保持设置为外部viewmodel。例如:
-
-
:
我不明白你的问题,什么不起作用?你的问题是什么:是$parent.$parent
的语法,还是你必须使用span
,因为你不能合并foreach
和if
?由于某种原因,$parent.$parent
对我不起作用,但是这个解决方案很好,而且它也很短!
<!-- ko foreach: grandParent -->
<tr>
<!-- ko foreach: $parent.parents -->
<!-- ko foreach: children -->
<td data-bind="if: favToy().name == $parent.$parent.favToy().name">
<span data-bind="text: favToy().name"></span>
</td>
<!-- /ko -->
<!-- /ko -->
</tr>
<!-- /ko -->
<!-- ko foreach: grandParent -->
<tr>
<!-- ko foreach: $parent.parents -->
<!-- ko foreach: children ? favToy().name == $parent.$parent.favToy().name -->
<td data-bind="text: favToy().name"></td>
<!-- /ko -->
<!-- /ko -->
</tr>
<!-- /ko -->
<ul data-bind="foreach: { data: categories, as: 'category', noChildContext: true }">
<li>
<ul data-bind="foreach: { data: category.items, as: 'item', noChildContext: true }">
<li>
<span data-bind="text: category.name"></span>:
<span data-bind="text: item"></span>
</li>
</ul>
</li>
</ul>