如何在嵌套的foreach中调用后方处理程序功能?

发布于 2025-01-31 05:33:00 字数 1398 浏览 1 评论 0原文

我曾备有语句,并用后面来调用该功能。

<div data-bind="foreach: { data: Object.keys(pricings()), as: '_propkey', afterRender: pricingTableRenderedHandler }">

在此迭代中,_propkey是一个字符串。然后,我不得不将foreach语句更改为以下:

<div data-bind="foreach: { data:  pricings(), as: '_propertykey', afterRender: pricingTableRenderedHandler}">
    <div data-bind="foreach: { data: _propertykey.states, as: '_secondarypropkey'}">

  self.pricingTableRenderedHandler = function (data, stateName) {
        var tableSelector = "#" + stateName.states.state.replace(/\s/g, '');

        hideEmptyTableColumns.hide(tableSelector);
        replaceEmptyTableCells.replaceBy(self.emptyCellValue, tableSelector);
  }

如果旧foreach,则在statename参数中接收了字符串 现在,它收到一个看起来像这样的对象。

[ 
"cropYear" : "2020"
"states": [
    {
        "state": "Tbilisi",
        "details": {
            "PriceHeaders": [
            
            ],
            "Comment": "TBi",
            "Pricings": [
            ]
        }
    }
    {
        "state": "Texas",
        "details": {
            "PriceHeaders": [
               
            ],
            "Comment": "dasdsa",
            "Pricings": [
            ]
        }
    }
]

]

我只需要采用“状态”属性值。 我假设我需要在Inner foreach中调用Handler功能,但是由于某种原因,我不能。除非将其写在第一个foreach中,否则它不会被调用。

I had foreach statement and used afterRender to call the function.

<div data-bind="foreach: { data: Object.keys(pricings()), as: '_propkey', afterRender: pricingTableRenderedHandler }">

During this iteration, _propkey was a single string. Then I had to change foreach statement to this :

<div data-bind="foreach: { data:  pricings(), as: '_propertykey', afterRender: pricingTableRenderedHandler}">
    <div data-bind="foreach: { data: _propertykey.states, as: '_secondarypropkey'}">

handler function

  self.pricingTableRenderedHandler = function (data, stateName) {
        var tableSelector = "#" + stateName.states.state.replace(/\s/g, '');

        hideEmptyTableColumns.hide(tableSelector);
        replaceEmptyTableCells.replaceBy(self.emptyCellValue, tableSelector);
  }

In case of old foreach, it received string in stateName parameter. Now, it receives an object that looks like this.

[ 
"cropYear" : "2020"
"states": [
    {
        "state": "Tbilisi",
        "details": {
            "PriceHeaders": [
            
            ],
            "Comment": "TBi",
            "Pricings": [
            ]
        }
    }
    {
        "state": "Texas",
        "details": {
            "PriceHeaders": [
               
            ],
            "Comment": "dasdsa",
            "Pricings": [
            ]
        }
    }
]

]

I only need to take "state" property value.
I'm assuming that I need to call handler function in inner foreach but for some reason, I can not. Unless it is written in the first foreach, it does not get called.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

缪败 2025-02-07 05:33:00

foreach绑定为每个元素创建一个新的绑定上下文。如果在模板中,您将传递给,则需要访问原始上下文的属性,则可以使用$ parent访问该属性。

<div data-bind="foreach: { 
                  data:  pricings(),
                  as: '_propertykey'
                }">
  <div data-bind="foreach: {
                    data: _propertykey.states,
                    as: '_secondarypropkey'},
                    afterRender: $parent.pricingTableRenderedHandler">
    <!--                         ^^^^^^^^                          -->
  </div>
</div>

请注意,该函数将以当前元素($ data)为this来调用。如果您的处理程序依赖于,则可以使用$ parent.methodname.bind($ parent)

The foreach binding creates a new binding context for every element. If, within the template you pass to foreach, you need to access a property of the original context, you can access that using $parent.

<div data-bind="foreach: { 
                  data:  pricings(),
                  as: '_propertykey'
                }">
  <div data-bind="foreach: {
                    data: _propertykey.states,
                    as: '_secondarypropkey'},
                    afterRender: $parent.pricingTableRenderedHandler">
    <!--                         ^^^^^^^^                          -->
  </div>
</div>

Note that the function will be called with the current element ($data) as this. If your handler relies on this, you can use $parent.methodName.bind($parent).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文