|
37 | 37 |
|
38 | 38 | _makeReady: function() {
|
39 | 39 | this._ready = true;
|
40 |
| - this._callbacks.forEach(function(cb) { |
41 |
| - cb(); |
42 |
| - }); |
| 40 | + for (var i=0; i < this._callbacks.length; i++) { |
| 41 | + this._callbacks[i](); |
| 42 | + } |
43 | 43 | this._callbacks = [];
|
44 | 44 | },
|
45 | 45 |
|
46 | 46 | _catchFirstRender: function() {
|
47 | 47 | requestAnimationFrame(function() {
|
48 | 48 | Polymer.RenderStatus._makeReady();
|
49 | 49 | });
|
| 50 | + }, |
| 51 | + |
| 52 | + _afterFirstRenderQueue: [], |
| 53 | + |
| 54 | + _waitingAfterFirstRender: false, |
| 55 | + |
| 56 | + afterFirstRender: function(element, fn, args) { |
| 57 | + if (!this._waitingAfterFirstRender) { |
| 58 | + this._waitingAfterFirstRender = true; |
| 59 | + this.whenReady(this._flushAfterFirstRender); |
| 60 | + } |
| 61 | + this._afterFirstRenderQueue.push([element, fn, args]); |
| 62 | + }, |
| 63 | + |
| 64 | + _flushAfterFirstRender: function() { |
| 65 | + requestAnimationFrame(function() { |
| 66 | + var self = Polymer.RenderStatus; |
| 67 | + // if already ready, wait 2 frames to ensure async |
| 68 | + if (self._ready) { |
| 69 | + requestAnimationFrame(self.__flushAfterFirstRender); |
| 70 | + } else { |
| 71 | + self.__flushAfterFirstRender(); |
| 72 | + } |
| 73 | + }); |
| 74 | + }, |
| 75 | + |
| 76 | + __flushAfterFirstRender: function() { |
| 77 | + var self = Polymer.RenderStatus; |
| 78 | + self._waitingAfterFirstRender = false; |
| 79 | + for (var i=0, h; i < self._afterFirstRenderQueue.length; i++) { |
| 80 | + h = self._afterFirstRenderQueue[i]; |
| 81 | + h[1].apply(h[0], h[2] || Polymer.nar); |
| 82 | + }; |
| 83 | + self._afterFirstRenderQueue = []; |
50 | 84 | }
|
51 | 85 | };
|
52 | 86 |
|
|
0 commit comments