1 | var EventEmitter = require('events').EventEmitter;
|
2 | var util = require('racer/lib/util');
|
3 | var Dom = require('./Dom');
|
4 |
|
5 | module.exports = Controller;
|
6 |
|
7 | function Controller(app, page, model) {
|
8 | EventEmitter.call(this);
|
9 | this.dom = new Dom(this);
|
10 | this.app = app;
|
11 | this.page = page;
|
12 | this.model = model;
|
13 | model.data.$controller = this;
|
14 | }
|
15 |
|
16 | util.mergeInto(Controller.prototype, EventEmitter.prototype);
|
17 |
|
18 | Controller.prototype.emitCancellable = function() {
|
19 | var cancelled = false;
|
20 | function cancel() {
|
21 | cancelled = true;
|
22 | }
|
23 |
|
24 | var args = Array.prototype.slice.call(arguments);
|
25 | args.push(cancel);
|
26 | this.emit.apply(this, args);
|
27 |
|
28 | return cancelled;
|
29 | };
|
30 |
|
31 | Controller.prototype.emitDelayable = function() {
|
32 | var args = Array.prototype.slice.call(arguments);
|
33 | var callback = args.pop();
|
34 |
|
35 | var delayed = false;
|
36 | function delay() {
|
37 | delayed = true;
|
38 | return callback;
|
39 | }
|
40 |
|
41 | args.push(delay);
|
42 | this.emit.apply(this, args);
|
43 | if (!delayed) callback();
|
44 |
|
45 | return delayed;
|
46 | };
|