# Je code ontkoppelen met events

> Verstuur en beluister applicatie-events met EMIT(), ON(), ONCE() en OFF() zodat modules elkaar niet rechtstreeks aanroepen.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: nl
Content-SHA256: 37a74b1c118289495a66cf399501b67c0cc93af5a7ce3e46d702eb27629f6f7c
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

`ON(name, fn)` registreert een luisteraar, `EMIT(name, a, b, c...)` roept elke luisteraar aan met de gegeven argumenten, `ONCE(name, fn)` luistert alleen naar de eerste emit en `OFF(name, fn)` verwijdert luisteraars. Events zijn binnen het proces en synchroon. Gebruik ze om een functie op iets te laten reageren (een bestelling is betaald) zonder dat de code die het veroorzaakt ervan weet.

```js definitions/audit.js
MAIN.audit = [];

ON('order.paid', function(order) {
	MAIN.audit.push('paid ' + order.id);
});

ONCE('order.first', function(order) {
	MAIN.audit.push('first ' + order.id);
});
```

```js controllers/orders.js
exports.install = function() {
	ROUTE('POST /pay/{id}/', pay);
	ROUTE('GET /audit/', audit);
};

function pay($) {
	var order = { id: $.params.id };
	EMIT('order.first', order);
	EMIT('order.paid', order);
	$.json({ ok: true });
}

function audit($) {
	$.json(MAIN.audit);
}
```
