【发布时间】:2017-08-18 18:57:54
【问题描述】:
考虑以下使用 Semantic UI 的 Ember 组件:
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属性发生变化。
有没有办法让组件以同步的方式向父级请求值?
【问题讨论】:
-
“获得父母的承诺”是什么意思?
-
@Roamer-1888 父级创建 promise 以响应单击模态的 OK 按钮,然后组件需要访问 promise 以便在 promise 解决时自行关闭。
标签: javascript ember.js promise synchronous