# Frikoppla din kod med events

> Skicka och lyssna på applikations-events med EMIT(), ON(), ONCE() och OFF() så att moduler inte anropar varandra direkt.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: sv
Content-SHA256: 3a236f4dbc6b8e5edf96a048e3db614e377bd01b011477cd5d5c69461eb7528f
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

`ON(name, fn)` registrerar en lyssnare, `EMIT(name, a, b, c...)` anropar varje lyssnare med de angivna argumenten, `ONCE(name, fn)` lyssnar bara på den första emit och `OFF(name, fn)` tar bort lyssnare. Events sker inom processen och är synkrona. Använd dem för att låta en funktion reagera på något (en order har betalats) utan att koden som orsakar det känner till den.

```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);
}
```
