-
Notifications
You must be signed in to change notification settings - Fork 16
/
backbone.shortcuts.js
40 lines (35 loc) · 1.13 KB
/
backbone.shortcuts.js
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
(function() {
var Shortcuts;
Shortcuts = function(options) {
this.cid = _.uniqueId("backbone.shortcuts");
this.initialize.apply(this, arguments);
return this.delegateShortcuts();
};
_.extend(Shortcuts.prototype, Backbone.Events, {
initialize: function() {},
delegateShortcuts: function() {
var callback, match, method, scope, shortcut, shortcutKey, _ref, _results;
if (!this.shortcuts) return;
_ref = this.shortcuts;
_results = [];
for (shortcut in _ref) {
callback = _ref[shortcut];
if (!_.isFunction(callback)){
method = this[callback];
if (!method) throw new Error("Method " + callback + " does not exist");
}
else {
method = callback;
}
match = shortcut.match(/^(\S+)\s*(.*)$/);
shortcutKey = match[1];
scope = match[2] === "" ? "all" : match[2];
method = _.bind(method, this);
_results.push(key(shortcutKey, scope, method));
}
return _results;
}
});
Backbone.Shortcuts = Shortcuts;
Backbone.Shortcuts.extend = Backbone.View.extend;
}).call(this);