-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbackbone.historyEvents.js
79 lines (69 loc) · 2.85 KB
/
backbone.historyEvents.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
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
67
68
69
70
71
72
73
74
75
76
77
78
79
(function (root, factory) {
if (typeof define === "function" && define.amd) {
// AMD. Register as an anonymous module.
define(["underscore","backbone"], function(_, Backbone) {
// Use global variables if the locals are undefined.
return factory(_ || root._, Backbone || root.Backbone);
});
} else if (typeof exports === 'object') {
module.exports = factory(require("underscore"), require("backbone"));
} else {
// RequireJS isn't being used. Assume underscore and backbone are loaded in <script> tags
factory(_, Backbone);
}
}(this, function(_, Backbone) {
'use strict';
/**
* @namespace Backbone.History
*/
/**
* Provides some extra events to the Backbone.history object.
*
* @fires Backbone.History#navigated
* @fires Backbone.History#routeNotFound
*/
/**
* This is always triggered when `Backbone.history.navigate` is executed, regardless if any routes matched or not.
*
* @event Backbone.History#navigated
* @param {boolean} routeTriggered If the url triggered a router handler
* @param {string} fragment The fragment requested
* @param {object} options The original options passed into the `Backbone.History.navigate` call
* @example
* Backbone.history.on('navigated', function(fragment, options, routeTriggered){
* console.log('Navigated to ', fragment, '. Triggered router:', routeTriggered, ' with options ', options );
* });
*
* Backbone.history.navigate('/myRoute', {trigger:true});
* // Naivagted to /myRoute . Triggered router: true with options Object {trigger: true}
* @return {boolean} If the route was triggered or not
*/
Backbone.History.prototype.navigate = _.wrap(Backbone.History.prototype.navigate, function(oldNavigate, fragment, options) {
var routeTriggered = oldNavigate.call(this, fragment, options);
this.trigger('navigated', fragment, options, routeTriggered);
return routeTriggered;
});
/**
* Triggered if `Backbone.history.loadUrl` fails to match a router handler for the `fragment`
* @event Backbone.History#routeNotFound
* @param {string} fragment The fragment requested
* @example
* Backbone.history.on('routeNotFound', function(fragment){
* console.log('Page Not found ', fragment);
* });
*
* Backbone.history.navigate('/nonExistantRoute', {trigger:true});
* // Page Not found nonExistantRoute
*
* Backbone.history.navigate('/nonExistantRoute');
* // Handler is not triggered as nothing tried to load a route (no trigger)
* @return {boolean} If the route was triggered or not
*/
Backbone.History.prototype.loadUrl = _.wrap(Backbone.History.prototype.loadUrl, function(oldLoadUrl, fragment) {
var routeTriggered = oldLoadUrl.call(this, fragment);
if(!routeTriggered) {
this.trigger('routeNotFound', fragment);
}
return routeTriggered;
});
}));