forked from biggerboat/backbone-command
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbackbone-command.js
More file actions
66 lines (51 loc) · 2.05 KB
/
Copy pathbackbone-command.js
File metadata and controls
66 lines (51 loc) · 2.05 KB
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
(function(root, factory) {
// Start with AMD.
if (typeof define === 'function' && define.amd) {
define(['underscore', 'backbone'], function(_, Backbone) {
factory( _, Backbone);
});
// Next for Node.js or CommonJS.
} else if (typeof exports !== 'undefined' && typeof require === 'function') {
var _ = require('underscore'),
Backbone = require('backbone');
factory(_, Backbone);
// Finally, as a browser global.
} else {
factory(root._, root.Backbone);
}
}(this, function factory(_, Backbone) {
Backbone.Command = function (options) {
this._configure(options || {});
};
_.extend(Backbone.Command.prototype, {
injector: 'inject',
_configure: function(options) {
if(options.injector !== undefined) {
options.injector.injectInto(this);
}
},
execute:function () {
}
});
//Like all Backbone classes, make use of the same extend method
Backbone.Command.extend = Backbone.Router.extend;
//Yaiks! Our only way into the router is the _bindRoutes. Unfortunately there is no _configure method such as we have within a View
var _bindRoutes = Backbone.Router.prototype._bindRoutes;
Backbone.CommandRouter = Backbone.Router.extend({
injector: null,
//We abuse this as our constructor. We want to initialize the injector. The initialize method could be used for this,
//but this allows users to easily overwrite the method and breaking this class.
_bindRoutes: function() {
this.injector = new injector.Injector();
_bindRoutes();
},
bindCommand: function(listenObject, event, command) {
listenObject.on(event, this._executeCommand, {command:command, options:{injector:this.injector}});
},
_executeCommand: function(){
var theCommand = new this.command(this.options);
theCommand.execute.apply(theCommand, arguments);
theCommand = null;
}
});
}));