Salesforce lightning componente组件.force:createRecord/e.force:createRecord callback

有一句俗话:牙疼不要命,疼起来真要命。

有时候困扰我的并不是难以理解的需求或者技术。而是小问题找不到解决办法。困扰了我超过5个的小小问题。找到方法后,觉着真简单。。。

场景:我在lightning页面上自定义了个选项卡,选项卡里面放了个自定义组件,显示相关记录record list,并提供按钮进行新增,编辑。本身就是组件,新增/编辑也是基础功能,标准弹窗就解决问题了呗。想是这么想的。问题出现了:

在controller.js中,使用e.force:createRecord 和e.force:editRecord,过程中点击保存按钮。并不会更新组件内容。

不多说,直接说解决方案。

e.force:createRecord 提供了参数,我们可以直接使用,代码:

var createRecordEvent = $A.get("e.force:createRecord");
createRecordEvent.setParams({
  'entityApiName': 'Account',
  'defaultFieldValues': {
  'Name' :'test'
  },
  "navigationLocation":"LOOKUP", //默认跳转到创建记录页面,此参数可不跳转。
  "panelOnDestroyCallback": function(event) {    //提供了panelOnDestroyCallback 参数,提供了方法。我使用了helper当中写的初始化方法,可以自行更改。
    helper.loadInit(component,component.get("v.recordId"));
  }
});
createRecordEvent.fire();

卡我的问题来了:

e.force:editRecord可没有这么方便的东西。就一个recordId。

代码:

var editRecordEvent = $A.get("e.force:editRecord");
editRecordEvent.setParams({
  "recordId": id
});
editRecordEvent.fire();

怎么办呢,各种地方开始找,尝试过e.force:refreshView ,意料之中的没用。然后尝试通过捕捉事件来实现,如果不理解这句话,你可以比喻为神经系统,你要做什么操作,大脑发出了什么样的信号,原理是一样的。我使用了<aura:handler name="onSaveSuccess" event="force:recordSaveSuccess" action="{!c.doInit}"/>。打算捕捉记录保存成功的方式,来进行初始化。此方法是我在谷歌上找到的觉着比较靠谱的。嗯,解决不了。我觉着可能是因为这已经属于两个组件的缘故。

卡了我一晚上,第二天上午的时候,突然发现了一件事,当我们点击保存按钮的时候,页面上会显示showToast!!!那showtoast的信号能不能捕捉到?

<aura:handler event="force:showToast" action="{!c.doInit}"/> 是我最后的倔强。解决了我的问题。而且可以同时解决editRecord和createRecord不更新组件的问题。

都是新手,开始会遇到各种坑。加油。

posted @ 2022-04-01 14:41  哦皇族  阅读(104)  评论(0)    收藏  举报