如何在嵌套的 foreach 中调用 afterRender 处理函数?
How to call afterRender handler function in nested foreach?
我有 foreach 语句并使用 afterRender 调用该函数。
<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": [
]
}
}
]
]
我只需要取“状态”属性值。
我假设我需要在内部 foreach 中调用处理函数,但由于某种原因,我不能。除非它写在第一个foreach中,否则不会被调用。
foreach
绑定为每个元素创建一个新的绑定上下文。如果在传递给 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
调用该函数。如果您的处理程序依赖于 this
,您可以使用 $parent.methodName.bind($parent)
.
我有 foreach 语句并使用 afterRender 调用该函数。
<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": [
]
}
}
]
]
我只需要取“状态”属性值。 我假设我需要在内部 foreach 中调用处理函数,但由于某种原因,我不能。除非它写在第一个foreach中,否则不会被调用。
foreach
绑定为每个元素创建一个新的绑定上下文。如果在传递给 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
调用该函数。如果您的处理程序依赖于 this
,您可以使用 $parent.methodName.bind($parent)
.