敲除 JS $parent 对象在 for-each 循环中更改其信息

knockout JS $parent object change its information inside for-each loop

我在magento2 order summery detail page有一个knockout js代码。

这是代码

<p data-bind="text:console.log('parent befor', $parent)"></p> 
    <!--ko foreach: { data: JSON.parse($parent.options), as: 'option' } -->
        <p data-bind="text:console.log('parent after', $parent)"></p> 

一旦我们进入 foreach 循环,$parent 变量就会改变它的内容。一旦在循环中,我需要这个 $parent 变量的一些其他信息,但它们都被一些未知信息所取代。这是我的 console.log。我如何在 foreach 循环中使用原始 $parent 信息。

parent befor {item_id: "300", name: "Vertual Product", qty: 1, price: "3.0000", base_price: "3.0000"}

parent after UiClass {_super: undefined, ignoreTmpls: {…}, _requested: {…}, containers: Array(1), exports: {…}, …}

您所看到的行为的原因是上下文已更改,因此,被认为是父级的内容已更改。你已经从圈外变成了圈内

查看 $parents 数组 属性。你应该在那里找到你要找的东西。根据上面的描述,你要找的应该在$parents[1] https://knockoutjs.com/documentation/binding-context.html

foreach 绑定中的 $parent 指的是 foreach 循环的上下文,而不是父上下文。

使用$parents[1]

它将引用父上下文。