aboutsummaryrefslogtreecommitdiff
path: root/atom/packages/vim-mode/node_modules/event-kit/README.md
blob: 0dc343d9398965bccf83dbfea09ac1a2f45b4f6a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# event-kit

This is a simple library for implementing event subscription APIs.

## Implementing Event Subscription APIs

```coffee
{Emitter} = require 'event-kit'

class User
  constructor: ->
     @emitter = new Emitter

  onDidChangeName: (callback) ->
     @emitter.on 'did-change-name', callback

  setName: (name) ->
     if name isnt @name
       @name = name
       @emitter.emit 'did-change-name', name
     @name

  destroy: ->
    @emitter.dispose()
```

In the example above, we implement `::onDidChangeName` on the user object, which
will register callbacks to be invoked whenever the user's name changes. To do
so, we make use of an internal `Emitter` instance. We use `::on` to subscribe
the given callback in `::onDidChangeName`, and `::emit` in `::setName` to notify
subscribers. Finally, when the `User` instance is destroyed we call `::dispose`
on the emitter to unsubscribe all subscribers.

## Consuming Event Subscription APIs

`Emitter::on` returns a `Disposable` instance, which has a `::dispose` method.
To unsubscribe, simply call dispose on the returned object.

```coffee
subscription = user.onDidChangeName (name) -> console.log("My name is #{name}")
# Later, to unsubscribe...
subscription.dispose()
```

You can also use `CompositeDisposable` to combine disposable instances together.

```coffee
{CompositeDisposable} = require 'event-kit'

subscriptions = new CompositeDisposable
subscriptions.add user1.onDidChangeName (name) -> console.log("User 1: #{name}")
subscriptions.add user2.onDidChangeName (name) -> console.log("User 2: #{name}")

# Later, to unsubscribe from *both*...
subscriptions.dispose()
```

## Creating Your Own Disposables

Disposables are convenient ways to represent a resource you will no longer
need at some point. You can instantiate a disposable with an action to take when
no longer needed.

```coffee
{Disposable} = require 'event-kit'

disposable = new Disposable => @destroyResource()
```