OLD | NEW |
| (Empty) |
1 | |
2 (function(scope) { | |
3 var MoreRouting = scope.MoreRouting = scope.MoreRouting || {}; | |
4 MoreRouting.Params = Params; | |
5 | |
6 /** | |
7 * A collection of route parameters and their values, with nofications. | |
8 * | |
9 * Params prefixed by `__` are reserved. | |
10 * | |
11 * @param {!Array<string>} params The keys of the params being managed. | |
12 * @param {Params=} parent A parent route's params to inherit. | |
13 * @return {Params} | |
14 */ | |
15 function Params(params, parent) { | |
16 var model = Object.create(parent || Params.prototype); | |
17 // We have a different set of listeners at every level of the hierarchy. | |
18 Object.defineProperty(model, '__listeners', {value: []}); | |
19 | |
20 // We keep all state enclosed within this closure so that inheritance stays | |
21 // relatively straightfoward. | |
22 var state = {}; | |
23 _compile(model, params, state); | |
24 | |
25 return model; | |
26 } | |
27 Params.prototype = Object.create(MoreRouting.Emitter); | |
28 | |
29 // Utility | |
30 | |
31 function _compile(model, params, state) { | |
32 params.forEach(function(param) { | |
33 Object.defineProperty(model, param, { | |
34 get: function() { | |
35 return state[param]; | |
36 }, | |
37 set: function(value) { | |
38 if (state[param] === value) return; | |
39 state[param] = value; | |
40 model.__notify(param, value); | |
41 }, | |
42 }); | |
43 }); | |
44 } | |
45 | |
46 })(window); | |
OLD | NEW |