2017-04-25 56 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); 
    }, 

因此,基本上,您正在採取傳遞到組件的動作並調用它,從組件傳入任何想要的參數。關閉操作非常好,他們使操作更容易。希望這會讓你的車輪轉向:)