当前位置:  开发笔记 > 编程语言 > 正文

在Ember路线中,如何检查是否存在动作?

如何解决《在Ember路线中,如何检查是否存在动作?》经验,为你挑选了1个好方法。

在组件中,为组件提供可选操作非常容易.在组件的JS中我可以写:

if (this.get('someAction')) {
  this.sendAction('someAction');
}

在我的应用程序路由中,我有一个"通用操作",可以节省我提供带有长动作列表的窗口小部件组件,它看起来像这样:

genericAction: function(customActionName, customActionParams) {
  this.send(customActionName, customActionParams);
}

由于各种原因(包括在某些组件中使用genericAction来触发测试可以订阅的操作,但是应用程序不一定用于某些难以测试的异步/伪装工作流程)我宁愿检查操作是否存在,即:

genericAction: function(customActionName, customActionParams) {
  if (this.get(customActionName)) {
    this.send(customActionName, customActionParams);
  }
}

与组件中的方式类似,但这不起作用,也不起作用this.controller.get(customActionName).

除了保留硬编码的动作列表之外,我该如何实现这一目标?



1> Adam Knights..:

如果你将你的行动保留在routes/application.js文件本身,那么代码就是

在Ember 2.0或更高版本中:

   if(Em.get(this.actions, actionName)) {
         this.send(actionName);
   }

在Ember 1.13

在Ember 1.13中,this.actions未定义,你必须使用this._actions

   if(Em.get(this._actions, actionName)) {
         this.send(actionName);
   }

如果您需要同时支持Ember 1.x和2.x,请使用以下内容:

   let actions = this.actions || this._actions;
   if(Em.get(actions, actionName)) {
         this.send(actionName);
   }

如果你将你的行动保存在应用程序控制器(controllers/application.js)中,那么siva - abc的答案非常有用.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有