组件如何从其父组件同步获取值?
How can a component obtain a value synchronously from its parent?
考虑以下使用 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
选项指定当用户在对话框中单击 "OK" 时调用的回调。组件的父级提供一个 Ember.RSVP.Promise
,解析后关闭对话框。
问题就出在这里——如何获取父节点的promise?我考虑了以下可能性:
父级可以提供要调用的操作:
{{modal-dialog action='getPromise'}}
但是,动作不能 return 值,因此虽然组件可以调用动作,但无法使用它来获得承诺。
父级可以提供作为绑定的承诺 属性:
{{modal-dialog promise=promise}}
这种方法的问题是 didInsertElement()
无法获得承诺本身,因为组件必须等待 promise
属性 发生变异。
有没有办法让组件以同步方式向父级请求值?
闭包操作将 return 值,因此您可以 return 闭包操作中的 Promise。
{{modal-dialog getPromise=(action 'getPromise'}}
如果 getPromise 方法是 returning the promise 那么你可以像这样得到它 let promise = this.get('getPromise')()
考虑以下使用 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
选项指定当用户在对话框中单击 "OK" 时调用的回调。组件的父级提供一个 Ember.RSVP.Promise
,解析后关闭对话框。
问题就出在这里——如何获取父节点的promise?我考虑了以下可能性:
父级可以提供要调用的操作:
{{modal-dialog action='getPromise'}}
但是,动作不能 return 值,因此虽然组件可以调用动作,但无法使用它来获得承诺。
父级可以提供作为绑定的承诺 属性:
{{modal-dialog promise=promise}}
这种方法的问题是
didInsertElement()
无法获得承诺本身,因为组件必须等待promise
属性 发生变异。
有没有办法让组件以同步方式向父级请求值?
闭包操作将 return 值,因此您可以 return 闭包操作中的 Promise。
{{modal-dialog getPromise=(action 'getPromise'}}
如果 getPromise 方法是 returning the promise 那么你可以像这样得到它 let promise = this.get('getPromise')()