There are lot of things you can do with Promise. Today, I will share my experience on using promise for modal which I recently learned.
If you don't know much about EmberJs or Promise. Please visit EmberJS and
Promise) to get your basics up
Why Promise?
https://medium.com/javascript-scene/master-the-javascript-interview-what-is-a-promise-27fc71e77261
Prerequisites
ember install ember-bootstrap
ember generate ember-bootstrap --preprocessor=sass
If you want to use less instead of sass use --preprocesor=less
. For other config, please check here
Steps
- Create your component using
ember generate component promise
- promise.js
import Component from '@ember/component';
export default Component.extend({
// It's important to have response undefined instead of boolean
response : undefined,
show : false,
actions: {
promiseClicked() {
new Promise( respond => {
this.set( 'show', true );
this.addObserver( 'response', function observer() {
this.removeObserver( 'response', observer );
respond( this.get( 'response' ) )
});
}).then( proceed => {
if ( proceed ) {
console.log( proceed );
} else {
console.log( proceed );
}
this.setProperties({ 'show': false, 'response': undefined });
});
},
response( bool ) {
this.set( 'response', bool );
}
},
});
Make sure variable response is set to undefined after removing observer.
- promise.hbs
<BsButton @onClick={{action 'promiseClicked'}}> Promise </BsButton>
<BsModal
@open={{show}}
@onSubmit={{action "response" true}}
@onHidden={{action "response" false}} as |modal|>
<modal.header>
<h4 class="modal-title">
Custom Dialog
<div class="badge">2</div>
</h4>
</modal.header>
<modal.body>
Promise Example?
Check console when you click "Cancel or Save".
</modal.body>
<modal.footer>
<BsButton @onClick={{action "response" false}}>Cancel</BsButton>
<BsButton @type="success" @onClick={{action "response" true}}>Save</BsButton>
</modal.footer>
</BsModal>
That's it. Thanks!
Top comments (0)