vis*_*eek 2 components closures controller ember.js
我们最近从 ember 2+ 转移到 Ember 3.18.0,我正在努力从组件调用控制器功能。在以前的版本中,我们使用 sendAction 来冒泡动作,但现在由于 sendAction 已贬值并且正在使用闭包,我无法正确执行。
下面是我的代码
控制器.hbs
{{generic-err-modal err=receivedErr showDialog= this.showErrorModal onSave=(action "closePromptDialog")}}
Run Code Online (Sandbox Code Playgroud)
控制器.js
@action
closePromptDialog(){
this.set("showErrorModal",false);
}
Run Code Online (Sandbox Code Playgroud)
组件.hbs
{{#if @showDialog}}
<PaperDialog id="genericModal" class="flex-50" @fullscreen={{fullscreen}} @onClose={{action "closePromptDialog"}} @origin={{dialogOrigin}}>
<PaperDialogContent class="text-align-center">
{{paper-icon "remove_circle_outline" class="red" size=48}}
</PaperDialogContent>
<PaperDialogContent>
<h2>{{@err.errorMessage}}</h2>
</PaperDialogContent>
<PaperDialogActions @class="layout-row">
<span class="flex"></span>
<PaperButton @primary={{true}} @onClick={{action "hideModal"}} @raised={{true}}>Ok</PaperButton>
</PaperDialogActions>
</PaperDialog>
{{/if}}
Run Code Online (Sandbox Code Playgroud)
组件.js
@action
hideModal(){
this.args.onSave();
}
Run Code Online (Sandbox Code Playgroud)
在这我收到错误
Uncaught TypeError: method is not a function
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。
我使用的 Ember 版本是 3.18.0
小智 5
从 Octane 版本开始,一切在 Ember One 中变得更加明确,例如{{action}}传递函数的助手。在经典(pre-octane)模型中,当将字符串传递给action像 ,之类的帮助器时{{action "closePromptDialog"}},Ember 将在相应控制器closePromptDialog的actions哈希中搜索操作,如指南中的示例中所述。
由于引入了原生类和@action装饰器,我们不必{{action}}像actions哈希一样使用帮助器。我们可以直接将方法传递给组件,而无需操作助手,如3.18 指南中所述。所以,
控制器.hbs:
{{generic-err-modal
err=receivedErr
showDialog=this.showErrorModal
onSave=this.closePromptDialog
}}
Run Code Online (Sandbox Code Playgroud)
在这里,this.closePromptDialog将直接引用与任何其他类属性类似的支持类中的方法,例如receivedErr,在您的情况下。适当的this绑定将由@action装饰者处理。这同样适用于您在Component.hbs文件中的操作。
| 归档时间: |
|
| 查看次数: |
276 次 |
| 最近记录: |