2017-04-25 55 views
0

在我的余烬应用程序,我有大量的模态对话框组件,我在我的申请途径渲染,像这样:Ember.js最佳实践 - 我可以/应该重写sendAction吗?

{{component modalComponent options=modalOptions}} 

所有的对话框组件从一个单一的基类,其中,为了方便,我有延长被覆盖sendAction。覆盖点为总是target上触发某个操作,而sendAction的默认行为是“如果属性未定义,什么都不做”。这里是什么样子:

sendAction: function (actionName) { 
    if (Em.isEmpty(this.get(actionName))) { 
    this.set(actionName, actionName); 
    } 
    this._super(...arguments); 
}, 

这似乎像我预期的那样工作:始终触发对目标的操作,会再泡堆栈。我想知道的是...

覆盖sendAction我没有意识到是否有任何影响/副作用?

回答

0

目前,较为公认的方法来处理在组件上的动作之一是通过闭合动作:

模板:

{{do-button id="save" clickHandler=(action "storeEvent") contextMenuHandler=(action "logEvent") buttonText="Store It"}}

在组件:

import Ember from 'ember'; 

export default Ember.Component.extend({ 
    actions: { 
    clickHandler(event) { 
     this.get('clickHandler')(event); 
    }, 

    contextMenuHandler(event) { 
     event.preventDefault(); 
     this.get('contextMenuHandler')(event); 
    } 
    } 
}); 

而且最后,从控制器摘录:

actions: { 
    doStuff(event) { 
     alert(event); 
    }, 
    logEvent(event) { 
     console.log(event); 
    }, 

因此,基本上,您正在采取传递到组件的动作并调用它,从组件传入任何想要的参数。关闭操作非常好,他们使操作更容易。希望这会让你的车轮转向:)