2016-07-22 63 views
0

我正在使用余烬的项目。有条件的逻辑可以放在HTML模板,控制器和函数定义的位置。我有一个操作只需要在全局变量为true时触发。条件操作逻辑应该去哪里?

<div {{action 'CallThisAction' on='click'}}>...</div> 

在.hbs我可以做

{{#if global.x}} 
    <div {{action 'CallThisAction' on='click'}}>...</div> 
{{else}} 
    <div>...</div> 
{{/if}} 

或在功能我可以

CallThisAction(){ 
if(global.x){ 
    //do something 
    } 
} 

或我可以添加逻辑到控制器,以防止CallThisAction被称为偏置关闭全球。控制器也被折旧。

我还可以通过为PARAM:

CallThisAction(x){ 
if(x){ 
    //do something 
    } 
} 

有一个更清洁的方式做到这一点?理想情况下,这里的解决方案会很好:Feature Request

回答

1

您的模板不应该使用全局变量。最好在你的动作中存储这样的逻辑:

actions: { 
    CallThisAction(){ 
    if(!global || !global.x){ 
     return; 
    } 
    // do something 
    } 
} 
+0

我申请了答案。我试图更好地理解为什么,你能提供一个理由吗? – ajputnam

+0

模板应该只存储所需的逻辑。它是视图层而不是控制器层。模板和组件应尽可能简单。关于如何处理操作的逻辑应该存储在控制器中。如果在没有设置global.x时不需要在模板中显示不同的HTML,但只想设置global.x时触发操作,则最好将global.x检查移至控制器并保持模板简单。 –

+0

太棒了!这就说得通了。 – ajputnam