Ember将动作添加到模板以进行父/子通信

时间:2017-09-08 11:43:28

标签: javascript jquery ember.js handlebars.js

我正在尝试为我的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不能自动运行?

2 个答案:

答案 0 :(得分:1)

以下是我在跟踪数据下移,动作上升(DDAU)模式时如何处理它。

首先,使用action helper传递您想要触发的动作。

{{my-child someActionName=(action 'parentAction')}}

然后,您将检索该操作并从子组件中激活它。

this.get('someActionName')(params);

Ember Twiddle Complete Example

答案 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