2017-08-18 107 views
2

考慮其使用Semantic UI以下灰燼成分:組件如何從父組件同步獲取值?

import Ember from 'ember'; 

export default Ember.Component.extend({ 
    classNames: ['ui', 'mini', 'modal'], 
    didInsertElement() { 
    this.$().modal({ 
     onApprove:() => { 
     let promise = // obtain promise from parent... somehow 
     promise.then(() => { 
      this.$().modal('hide'); 
     }); 
     return false; 
     } 
    }); 
    } 
}); 

模態對話框只要元件是可訪問的初始化。 onApprove選項指定當用戶在對話框中單擊「確定」時要調用的回調。該組件的父級提供了一個Ember.RSVP.Promise,解決時關閉該對話框。

這裏就是問題—我該如何獲得父母的承諾?我考慮了以下可能性:

  • 母公司可以提供一個動作被調用:

    {{modal-dialog action='getPromise'}} 
    

    然而,行動不能返回值,因此雖然該部件可調用的動作,它不能使用它獲得承諾。

  • 母公司可以提供承諾的綁定屬性:

    {{modal-dialog promise=promise}} 
    

    這種方法的問題是didInsertElement()無法獲得承諾本身,因爲組件必須等待promise屬性變異。

有沒有辦法讓組件以同步的方式向父組索要值?

+0

你是什麼意思「獲得來自母公司的承諾」是什麼意思? –

+0

@ Roamer-1888父母創建承諾,以響應模型的OK按鈕被單擊,然後組件需要訪問承諾以便在承諾解決時自動關閉。 –

回答

2

閉包動作將返回值,以便您可以在閉包操作中返回Promise。

{{modal-dialog getPromise=(action 'getPromise'}} 

如果getPromise方法返回的承諾,那麼你可以把它像這樣let promise = this.get('getPromise')()