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不更新组件的问题。
都是新手,开始会遇到各种坑。加油。

浙公网安备 33010602011771号