我正在尝试为我的Ember组件定义一个自定义操作&想要在父母/孩子之间进行交流。
在my-child.js中,我有
Outfile Test.exe
name "Test"
!include MUI2.nsh
!include LogicLib.nsh
!insertmacro MUI_PAGE_WELCOME
Page instfiles Installer
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
Function Installer
UserInfo::GetAccountType
pop $0
${If} $0 != "admin" ;Require admin rights to install application
MessageBox mb_iconstop "Administrator rights required!"
SetErrorLevel 740 ;ERROR_ELEVATION_REQUIRED
Quit
${Else}
System::Call "kernel32::GetCurrentDirectory(i ${NSIS_MAX_STRLEN}, t .r0)"
CreateDirectory $3\pj
CopyFiles /SILENT \Source\*.* \destination\
${EndIf}
FunctionEnd
我在my-parent.js中抓住了同样的内容,如下所示;
actions: {
someCustomAction: function() {
let self = this;
self.sendAction('someCustomAction');
},
}
现在,使用上面的代码,控制/操作不会出现在my-parent.js
中我必须在模板中添加“someCustomAction”,如下所示
在my-parent.hbs
中actions: {
someCustomAction: function (){
console.log("Inside someCustomAction....");
}
}
我想知道相同的确切原因。为什么sendAction不能自动运行?
答案 0 :(得分:1)
以下是我在跟踪数据下移,动作上升(DDAU)模式时如何处理它。
首先,使用action helper传递您想要触发的动作。
{{my-child someActionName=(action 'parentAction')}}
然后,您将检索该操作并从子组件中激活它。
this.get('someActionName')(params);
答案 1 :(得分:1)
这是因为组件不是上下文感知的。因此,需要手动将操作绑定在一起。但是,这也使您能够在同一组件上发送不同的操作,甚至还有其他参数。
组件与周围环境隔离,因此任何数据都可以 组件需求必须传入。 https://guides.emberjs.com/v2.15.0/components/passing-properties-to-a-component/
如果组件真正被隔离,那么操作也是如此。 https://guides.emberjs.com/v2.15.0/components/triggering-changes-with-actions/#toc_passing-the-action-to-the-component