2015-12-21 42 views
2

在组件中,为组件提供可选的操作非常简单。在组件的JS我可以这样写:在Ember路线中,我该如何检查行动是否存在?

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)也不起作用。

除了保留一个硬编码的动作列表,我该如何做到这一点?

回答

5

如果你保持在航线您的行为/的application.js文件本身,则代码将

在余烬2.0或更高版本:

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

在余烬1.13

this.actions在灰烬1.13不定,所以你必须使用this._actions

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

如果你需要同时支持灰烬1.x和2.x然后使用类似:

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

如果您将操作保存在应用程序控制器(controllers/application.js)中,那么siva-abc的答案会很好。

2

您可以检查controller.actions中的操作。你的情况,你必须检查为

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

这里是一个demo

+0

存在丢失的封闭托架我想: '如果(Em.get(this.controller.actions,actionName)){ 这一点。获得( '控制器')发送(actionName)。 }' – Pavol

0

,如果你是在一个组件,您可以使用

if (this.get('yourActionName')) { }