Actions
Summary
In the Flux {Architecture.md}, almost every user action is translated into an Action object and fired globally. Stores in the app observe these actions and perform business logic. This loose coupling means that your packages can observe actions and perform additional logic, or fire actions which the rest of the app will handle.
In Reflux, each {Action} is an independent object that acts as an event emitter. You can listen to an Action, or invoke it as a function to fire it.
Action Scopes
Mailspring is a multi-window application. The scope
of an Action dictates
how it propogates between windows.
- Global: These actions can be listened to from any window and fired from any window. The action is sent from the originating window to all other windows via IPC, so they should be used with care. Firing this action from anywhere will cause all listeners in all windows to fire.
- Main Window: You can fire these actions in any window. They'll be sent to the main window and triggered there.
- Window: These actions only trigger listeners in the window they're fired in.
Firing Actions
Actions.queueTask(new ChangeStarredTask(thread: @_thread, starred: true))
Listening for Actions
If you're using Reflux to create your own Store, you can use the listenTo
convenience method to listen for an Action. If you're creating your own class
that is not a Store, you can still use the listen
method provided by Reflux:
setup: ->
@unlisten = Actions.onNewMailDeltas.listen(@onNewMailReceived, @)
onNewMailReceived: (data) ->
console.log("You've got mail!", data)
teardown: ->
@unlisten()