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

Posted

技术标签:

【中文标题】淘汰 JS $parent 对象在 for-each 循环中更改其信息【英文标题】:knockout JS $parent object change its information inside for-each loop 【发布时间】:2021-10-16 18:02:36 【问题描述】:

我在magento2订单夏季详细信息页面中有一个淘汰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 变量的一些其他信息,但它都被一些未知信息所取代。这是我的控制台日志。我如何在 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: …, …

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

谢谢@Nathan,您的回答真的很有帮助。我在内部循环中使用“$parentContext.$parent”获得了我的价值。

【参考方案2】:

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

使用 $parents[1]

它将引用父上下文。

【讨论】:

我在内部循环中使用“$parentContext.$parent”获得了我的价值

以上是关于淘汰 JS $parent 对象在 for-each 循环中更改其信息的主要内容,如果未能解决你的问题,请参考以下文章

如何从对象数组中删除对象。在淘汰赛JS。错误:对象不支持属性或方法“删除”

js对象 parent

可见绑定在淘汰赛 js 中不起作用

声明为对象文字与函数的淘汰视图模型之间的区别

对象键值更改时刷新 UI - 淘汰赛

您如何使用淘汰赛 js 引用当前元素?