我有一个闪电组件,它将在更新操作时调用控制器方法。下面是组件、控制器和助手的代码: 组件代码:
<force:recordData aura:id="forceRecord"
recordId="{!v.recordId}"
layoutType="FULL"
targetRecord="{!v._record}"
targetFields="{!v.simpleRecord}"
targetError="{!v._error}"
mode="EDIT"
recordUpdated="{!c.recordUpdated}" />
控制器代码:
({
doInit : function(component, event, helper) {
helper.checkStatus(component,event,helper);
},
recordUpdated : function(component, event, helper) {
var changeType = event.getParams().changeType;
console.log('changeType IS: '+ changeType);
// changeType = LOADED -- when record is created.
if (changeType === "ERROR") { /* handle error; do this first! */ }
else if (changeType === "LOADED") {
}
else if (changeType === "REMOVED") { /* handle record removal */ }
else if (changeType === "CHANGED") {
var recordId = component.get("v.recordId");
console.log('Updated record Id: '+ recordId);
helper.callAnotherMethod(component, event, helper);
}
}
})
假设我正在浏览器中访问付款(URL 中的 ID:a001l000005JP5mAAG)页面并修改其中的一些字段并保存它。调用 recordUpdated 方法并进入 CHANGED if 条件。
我在同一个浏览器窗口中打开了一些其他付款(URL 中的 ID:a001l000005HK5mBBK),并修改了此付款中的字段值并保存。此时 recordUpdated 方法被调用两次,一次用于旧付款,一次用于新付款。
如果我查看浏览器控制台,我会看到如下日志:
changeType IS: CHANGED
Updated record Id: a001l000005JP5mAAG
changeType IS: CHANGED
Updated record Id: a001l000005HK5mBBK
不知道为什么它会调用两次以及如何阻止它?谁能解释我为什么会这样以及如何阻止它?
令人惊讶的是,如果我在同一个浏览器窗口中打开更多付款并对其进行修改,它会不断为当前付款更新添加 recordUpdated 事件,并使用其 ID 调用早期付款的更新事件。