2017-08-18 54 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')()