获得当前的#foreach'在'与'的上下文中的项目捆绑

时间:2015-10-26 16:07:17

标签: javascript knockout.js data-binding

假设我们有以下布局:

<tbody data-bind="foreach: items">
    <tr>
        <td data-bind="with: $parent.inplaceEditorVm">
            <span data-bind="text: $parent.$data.OwnrPrefs"></span>
        </td>
    </tr>
</tbody>

我们如何在foreach绑定的上下文中访问当前with项的属性?

即。在上面的示例中,我们需要在data-bind表达式中为span元素写入什么来获取当前OwnrPrefs项的foreach的值?

当我在上面的示例中使用$parent.$data.OwnrPrefs时,它会抛出:

  

TypeError:无法获取属性&#39; OwnrPrefs&#39;未定义或null   参考

当我尝试使用$data.OwnrPrefs时,此表达式的值将解析为undefined,因为$data范围内的with绑定是inplaceEditorVm对象,而不是当前的foreach项。

1 个答案:

答案 0 :(得分:3)

withforeach等绑定会创建新的binding contexts。外部/原始上下文,即with之外的上下文,可以$parent获取 - 这是$parent引用的内容,它与您的viewmodel没有(直接)相关结构,而是页面上的绑定。

在您的情况下,您可以这样做:

<tbody data-bind="foreach: items">
    <tr>
        <td data-bind="with: $parent.inplaceEditorVm">
            <span data-bind="text: $parent.OwnrPrefs"></span>
        </td>
    </tr>
</tbody>