Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 访问$parent';敲除视图中的s$parent-嵌套上下文_Javascript_Knockout.js - Fatal编程技术网

Javascript 访问$parent';敲除视图中的s$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 -->

为简洁而更新

如何使用绑定在嵌套的敲除foreach/中引用$parents的$parent

范例-

    <!-- 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>