2015-12-21 44 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')) { }