You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This addon is no longer actively developed. But we'll still keep it here.
Why is it being deprecated?
After three years of use, it has become apparent that this is better used as a
pattern and not extracted to its own addon. The JS community has evolved and
writing logic based on promises is common practice.
How can I do this myself?
You can view this twiddle for an example of how you can easily control button state based
on the state of a promise. The button is disabled while saving, indicating when
it is pending and tells you when it was successful or fails. All this is done
without an addon. Simply save your promise to a property on your controller or
component, then you can update your button:
When running async actions ensuring disabling of the button,
re-enabling, and handling promise rejections is pretty boilerplate. This
component packages up that behavior.
{{#async-buttonaction=(action"save") as |componentstate|}}{{#ifstate.isDefault}}
Click here to save
{{/if}}{{#ifstate.isPending}}
Please wait...
{{/if}}{{#ifstate.isFulfilled}}
Everything went well, congrats!
{{/if}}{{#ifstate.isRejected}}
Ooops, something went wrong.
{{/if}}{{/async-button}}
The closure action passed should return a promise:
Special text used if the promise is resolved. If not provided will use the default value.
fulfilled
Special text used if the promise is fulfilled. If not provided will use the default value.
rejected
Special text used if the promise is rejected. If not provided will use the default value.
disableWhen
Boolean value that will allow for disabling the button when in a state other than pending
reset
Flag telling the button to reset to the default state once resolved or rejected. A typical use case is to bind this attribute with ember-data isDirty flag.
Styling
A class of async-button is assigned to the button. An additional
dynamic class is assigned during one of the four states:
default
pending
fulfilled
rejected
The href attribute of the a tag
You can adjust the button's tag by passing the tagName option:
When you set tagName to a, the element will obtain an empty href attribute. This is necessary to enable the link behavior of the element, i. e. color, underlining and hover effect.
You can of course override href if you need it for some reason: